首页 >企业动态 > > 正文

天天观察:每天都和时间序列打交道,我总结了这篇文章!

来源:程序员客栈 2023-06-20 15:45:38

Datawhale干货 

作者:戳戳龍,上海交通大学,量化算法工程师

前言

?  平时工作中每天都在和时间序列打交道,对时间序列分析进行研究是有必要的


(相关资料图)

?  分享和交流一些自己的在时序处理方面的心得,提供一些思路

?  介绍时序的发展情况,以及目前业界常用的方法

?  代码希望能模板化,能直接复制过去使用

时序方法发展
时间序列特征

?series = trend + seasons + dependence+ error

趋势

? 时间序列的趋势分量表示该序列均值的持续的、长期的变化

Df["ma20"] = Df["amt"].rolling(20).mean()

周期性(季节性)季节时序图

def plot_season(Df):    df = Df.copy()    # 计算每周属于哪一年    df["year"] = df["date"].dt.year    # 计算每周为一年当中的第几周    df["week_of_year"] = df["date"].dt.weekofyear    for year in df["year"].unique():        tmp_df = df[df["year"] == year]        plt.plot(tmp_df["week_of_year"], tmp_df["amt"], ".-", label=str(year))    plt.legend()    plt.show()

周期判断

?如果每隔h个单位,ACF值有一个局部高峰,则数据存在以h为单位的周期性

from  statsmodels.graphics.tsaplots import plot_acfplot_acf(Df["amt"], lags=500).show()

自相关性自相关

?自相关函数 autocorrelation function有序的随机变量序列与其自身相比较自相关函数反映了同一序列在不同时序的取值之间的相关性

from statsmodels.graphics.tsaplots import plot_acf_ = plot_acf(Df["amt"], lags=50)

偏自相关

from statsmodels.graphics.tsaplots import plot_pacfplot_pacf(Df["amt"], lags=5)

残差外部变量残差Prophet

?官方文档:https://facebook.github.io/prophet/docs/quick_start.html#python-api

原理模型结构

?模型结构——关于时间的广义线性模型

g(t):trend,用分段线性函数或逻辑增长曲线(logistic)拟合s(t):seasonality,用傅里叶级数拟合。可以叠加多个季节性,如weekly,yearly (s = s1+s2……)h(t):regressor,用线性函数拟合。可以叠加多个外部变量,如节假日、温度、活动(h = h1+h2+……):模型残差 不用拟合以上方程也可以写成乘法形式:乘法形式和加法形式可以相互转换,乘法形式两边取对数就是加法形式
趋势分段线性函数

?线性趋势函数

分段线性趋势函数

超参数,由用户给出分几段参数,根据历史数据拟合k:曲线增长速率m:曲线的截距
逻辑增长曲线

?函数展示:https://www.desmos.com/calculator/8pnqou9ojy?lang=zh-CN

超参数C:渐近线一共分几段参数k:曲线增长速率m:拐点对应时间周期性

?任何周期性函数都可以表示成傅里叶级数

超参数:由用户给定线参数:由历史数据拟合

? 函数展示:(https://www.desmos.com/calculator/5prck2beq1?lang=zh-CN

外部因素

: 模型输入, 外部因素在时刻的取值

Z可以是0-1变量 (e.g.是否是法定假日,是否是春节,是否有促销)

也可以是连续变量 (e.g.产品价格, 温度,降雨量)

:线性回归系数

算法流程

1️⃣ 先设定表达式(超参数)

2️⃣ 根据训练集数据求解参数

实践发电耗煤预测

df_train = Df[ (Df["date"]<"2022-01-01") & (Df["date"]>="2018-01-01") ]df_test =  Df[ (Df["date"]>="2022-01-01")]

def FB(data):    df = pd.DataFrame({    "ds": data.date,    "y": data.amt,    })#     df["cap"] = data.amt.values.max()#     df["floor"] = data.amt.values.min()    m = prophet.Prophet(        changepoint_prior_scale=0.05,         daily_seasonality=False,        yearly_seasonality=True, #年周期性        weekly_seasonality=True, #周周期性#         growth="logistic",    )    m.add_seasonality(name="monthly", period=30.5, fourier_order=5, prior_scale=0.1)#月周期性    m.add_country_holidays(country_name="CN")#中国所有的节假日        m.fit(df)    future = m.make_future_dataframe(periods=30, freq="D")#预测时长#     future["cap"] = data.amt.values.max()#     future["floor"] = data.amt.values.min()    forecast = m.predict(future)    fig = m.plot_components(forecast)    fig1 = m.plot(forecast)    a = add_changepoints_to_plot(fig1.gca(), m, forecast)    return forecast,m

forecast,m = FB(df_train)

def FPPredict(data,m):    df = pd.DataFrame({    "ds": data.date,    "y": data.amt,    })    df_predict = m.predict(df)    df["yhat"] = df_predict["yhat"].values    df = df.set_index("ds")    df.plot()    return df

df = FPPredict(df_test.tail(200),m)

申购赎回金额预测

kaggle notebook[1]

Purchase Redemption Data.zip

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport prophetfrom prophet.diagnostics import cross_validationfrom prophet.diagnostics import performance_metricsfrom prophet.plot import plot_cross_validation_metricimport warningswarnings.filterwarnings("ignore")

data_user = pd.read_csv("../input/purchase-redemption/Purchase Redemption Data/user_balance_table.csv")data_user["report_date"] = pd.to_datetime(data_user["report_date"], format="%Y%m%d")data_user.head()

data_user_byday = data_user.groupby(["report_date"])["total_purchase_amt","total_redeem_amt"].sum().sort_values(["report_date"]).reset_index()data_user_byday.head()

申购

#定义模型def FB(data: pd.DataFrame):    df = pd.DataFrame({    "ds": data.report_date,    "y": data.total_purchase_amt,    })#     df["cap"] = data.total_purchase_amt.values.max()#     df["floor"] = data.total_purchase_amt.values.min()    m = prophet.Prophet(        changepoint_prior_scale=0.05,         daily_seasonality=False,        yearly_seasonality=True, #年周期性        weekly_seasonality=True, #周周期性#         growth="logistic",    )#     m.add_seasonality(name="monthly", period=30.5, fourier_order=5, prior_scale=0.1)#月周期性    m.add_country_holidays(country_name="CN")#中国所有的节假日        m.fit(df)    future = m.make_future_dataframe(periods=30, freq="D")#预测时长#     future["cap"] = data.total_purchase_amt.values.max()#     future["floor"] = data.total_purchase_amt.values.min()    forecast = m.predict(future)    fig = m.plot_components(forecast)    fig1 = m.plot(forecast)    return forecast,m

result_purchase,purchase_model = FB(data_user_byday.iloc[:-30])

def FPPredict(data,m):    df = pd.DataFrame({    "ds": data.report_date,    "y": data.total_purchase_amt,    })#     df["cap"] = data.total_purchase_amt.values.max()#     df["floor"] = data.total_purchase_amt.values.min()    df_predict = m.predict(df)    df["yhat"] = df_predict["yhat"].values    df = df.set_index("ds")    df.plot()    return df

purchase_df = FPPredict(data_user_byday.iloc[-30:],purchase_model)

赎回

#定义模型def FB(data: pd.DataFrame):    df = pd.DataFrame({    "ds": data.report_date,    "y": data.total_redeem_amt,    })    df["cap"] = data.total_purchase_amt.values.max()    df["floor"] = data.total_purchase_amt.values.min()    m = prophet.Prophet(        changepoint_prior_scale=0.05,         daily_seasonality=False,        yearly_seasonality=True, #年周期性        weekly_seasonality=True, #周周期性        growth="logistic",    )#     m.add_seasonality(name="monthly", period=30.5, fourier_order=5, prior_scale=0.1)#月周期性    m.add_country_holidays(country_name="CN")#中国所有的节假日        m.fit(df)    future = m.make_future_dataframe(periods=30, freq="D")#预测时长    future["cap"] = data.total_purchase_amt.values.max()    future["floor"] = data.total_purchase_amt.values.min()    forecast = m.predict(future)    fig = m.plot_components(forecast)    fig1 = m.plot(forecast)    return forecast

result_redeem = FB(data_user_byday)

Bonus 时间序列特征工程

https://www.heywhale.com/mw/project/63904f5658e3bea6a3e52800

EDA

import sweetviz as svdef eda(df, name, target=None):    sweet_report = sv.analyze(df, target_feat=target)    sweet_report.show_html(f"{name}.html")def eda_compare(df1, df2, name, feature, target):    feature_config = sv.FeatureConfig(force_text=feature, force_cat=feature)    sweet_report = sv.compare(df1, df2, feat_cfg=feature_config, target_feat=target)    sweet_report.show_html(f"{name}_compare.html")

完整版请访问:https://www.wolai.com/stupidccl/5dqha79nnrPMf5xTAs6jUu

参考资料[1]

kaggle notebook: https://www.kaggle.com/code/stupidccl/time-serious-analysis-1/edit/run/107631286

干货学习,点赞三连↓
上一篇:航行警告!南海海域军事训练 下一篇:最后一页
x
推荐阅读

天天观察:每天都和时间序列打交道,我总结了这篇文章!

2023-06-20

航行警告!南海海域军事训练

2023-06-20

转运进京的新生女婴患严重先心病 北京交警接力护送30分钟送至医院

2023-06-20

工银理财发布“稳鑫智远”产品品牌体系 当前简讯

2023-06-20

定了!贵州高考成绩发布时间为6月24日

2023-06-20

2021祝福语简短创意生日

2023-06-20

世界资讯:公允价值变动借贷方向(公允价值的定义)

2023-06-20

头条:数据里看亮点 从“618”看消费复苏新活力

2023-06-20

北京市食检院制定的食品补充检验方法发布实施

2023-06-20

LOL中gap什么意思 lol中的gap_焦点播报

2023-06-20

日本明确针对IT巨头开放第三方应用商店法规-全球今日报

2023-06-20

“太平洋不应成为危险废弃物的垃圾场”(国际视点)

2023-06-20

与BBA掰手腕,理想够不够格?_天天通讯

2023-06-20

北京到成都动车时刻表查询_北京到成都动车 全球微动态

2023-06-20

广西“三大专项行动”促进毕业生就业 今日观点

2023-06-20

全球讯息:忠县气象局发布大雾橙色预警【Ⅱ级/严重】【2023-06-20】

2023-06-20

安康市第六届全民健身瑜伽日活动在瀛湖景区隆重举行_环球报道

2023-06-20

中新人物|迪丽热巴:出道十年,失意得意皆值得

2023-06-20

绝地求生vac封号申诉_吃鸡被vac封号怎么办-世界消息

2023-06-20

环球今头条!mgp是什么牌子_MGP是什么品牌呢

2023-06-20

全球今头条!大唐新能源:前5月累计完成发电量1504.02万兆瓦时,同比增21.26%

2023-06-19

全球热点评!相差61岁“婚纱照”背后,竟是一段“捡来的”故事

2023-06-19

习近平会见美国国务卿

2023-06-19

瞭望|极端天气频现 防汛预字当先——专访水利部副部长刘伟平

2023-06-19

2023洛阳中考考点公布!

2023-06-19

又见交易系统故障!“一哥”中信证券:已正常,原因仍在排查

2023-06-19

西蒙地产集团宣布新的50亿美元循环信贷额度_焦点观察

2023-06-19

安宁法院“群众诉求服务站”揭牌成立-焦点消息

2023-06-19

苹果手机触控id密码(苹果手机触控id密码是什么)

2023-06-19

最新资讯:西部矿业:控股股东拟增持不低于公司总股本的0.55%

2023-06-19

WRITE的同音词 write的同音词|环球消息

2023-06-19

港股午评︱恒科指跌2.63% 恒指下挫超300点 科技股普遍疲软

2023-06-19

沪指震荡回调跌0.54% 两市逾3000股飘绿_短讯

2023-06-19

全球通讯!广东制造业如何当家?“百问百答”宝典来了

2023-06-19

全球今亮点!今日影评 | 那些电影中的“不完美”的父亲们!

2023-06-19

乌克兰多州拉响防空警报,防空洞近三分之一无法使用

2023-06-19

今年为啥这么热?多地开启“炙烤”模式_焦点

2023-06-19

【世界新视野】我崇拜你回眸一笑就刀山火海是什么歌

2023-06-19

上海虹口平溪商业广场预计下半年开业 总建面约5.2万㎡|热闻

2023-06-19

6月19日烟台中瑞氢氟酸价格暂稳

2023-06-19

爱情复仇剧《逢君》开机 禁忌缠恋上演极致拉扯

2023-06-19

网聚精彩,有“融”乃强!天津夏季达沃斯论坛主办城市网站见证融合的力量 速看

2023-06-19

每日短讯:『视网膜脱离』什么是原发性视网膜脱离

2023-06-19

将惨败皇马?曼城低价售欧冠功臣,1亿球星空降:被35岁梅西完爆 独家

2023-06-19

比亚迪仰望U8上海第一台车交付,停在顶级酒店门口,车主很神秘

2023-06-19

采埃孚监事会任命科兹利厄斯为集团董事,负责人力资源、法务及合规事务-天天微速讯

2023-06-19

中央财政下达内蒙古耕地地力保护补贴59.78亿元

2023-06-19

悠悠 下载(悠悠色影视)_天天热门

2023-06-19

羽绒服配裙子保暖时尚很有型,冬天这么穿超时髦 焦点热闻

2023-06-19

无解!华为向多家日本公司收取专利费 消息称如果不交或陷入瘫痪

2023-06-19

精选!湖南一招牌因“易燃”被强拆,商户:打火机点不着,损失近4万元,城管已登门致歉

2023-06-18

环球快播:iphone修复闪退软件(iphone闪退修复工具)

2023-06-18

以旅兴农 以农促旅 滨城区梁才街道积极探索农旅融合促乡村振兴新路径|世界观点

2023-06-18

天天速讯:怎么压缩文件夹成zip格式_怎么压缩文件夹

2023-06-18

住进九条裟罗的家里(中)

2023-06-18

让您的老父亲“沐浴”幸福,红马甲集团助浴团队在父亲节期间推出优惠活动 世界快资讯

2023-06-18

世界实时:定了!广东高考6月25日放榜!志愿填报有这些要求

2023-06-18

环球热消息:网页收藏在哪个文件夹_网页收藏夹在电脑哪里

2023-06-18

顺利退: 关于股票进入退市整理期交易的第二次风险提示公告

2023-06-18

一个家庭想要变富,别盯着钱财,要学会“海潮效应”

2023-06-18

滕王阁序中的典故整理及分类(滕王阁序中的典故整理)

2023-06-18

焦点快看:李稻葵:宏观经济治理工作的思路要从过去防过热变成防过冷

2023-06-18

中国能建与沙特阿尔朱美亚控股集团签署战略合作备忘录|环球资讯

2023-06-18

《照亮你》徐来为什么没有自己的恋情告诉父母? 焦点短讯

2023-06-18

普京说俄罗斯经济战略奏效-世界热资讯

2023-06-18

环球信息:又双叒是你!襄阳一男子无证三次酒驾被查获

2023-06-18

武汉生态联盟朋友圈扩大了

2023-06-18

还得离!大S索吻画面曝光,具俊晔抬头躲避很抗拒,知情人透实情-最新消息

2023-06-18

下周上班时间有变!还有100年只有4次的……

2023-06-18

全球看热讯:“暴雨蓝+雷电黄”预警高挂!全市启动防汛防台Ⅳ级响应行动

2023-06-18

电脑不出声音怎么办|世界新动态

2023-06-18

端午出游热情仍高 神州租车预订同比增长超6倍

2023-06-18

少年三国志2七星宝刀分析(七星宝刀怎么玩) 每日热闻

2023-06-18

深井天主教小学(关于深井天主教小学介绍)

2023-06-18

知名女演员宣布退出!-观天下

2023-06-17

全球热推荐:5c 5s屏幕通用吗(5c 5s)

2023-06-17

江西省人社厅:在全省技工院校开展校园食品安全专项整治

2023-06-17

当前观点:小说里好听的男主名字丁姓_小说里好听的男主名字

2023-06-17

环球百事通!警惕!高温中暑,严重可致死!医生紧急提醒……

2023-06-17

涞源县气象台发布雷电黄色预警【Ⅲ级/较重】【2023-06-17】

2023-06-17

抢抓黄金期,广州打响广东省土壤普查“第一枪” 全球实时

2023-06-17

地球最后的夜晚讲的什么故事(地球最后的夜晚讲的什么)

2023-06-17

微头条丨长岛交警大队积极参加区安全生产宣传咨询日活动

2023-06-17

世界快资讯:记者手记:中国治沙方案助力尼日利亚应对荒漠化挑战

2023-06-17

魔兽世界怀旧服恶心的软泥怪哪里刷_恶心的软泥怪哪里刷-每日信息

2023-06-17

信用减值损失借方表示什么|环球微动态

2023-06-17

王国辰:中医药领域的关键突破将对生物医学、生命科学发展产生影响-天天观热点

2023-06-17

环球播报:Galaxy Z Flip5 渲染图曝光 采用更大外屏尺寸

2023-06-17

牛津大学在哪里_关于牛津大学在哪里的介绍|环球快资讯

2023-06-17

今热点:注意!欧盟新电池法规出台了!

2023-06-17

【虹咲】虹咲草莓接力(noseru老师)-全球快消息

2023-06-17

伊利成为杭州亚运会官方乳制品独家供应商,大体育战略布局再下一城 速读

2023-06-17

天天快资讯丨克宫:俄罗斯与中国、伊朗、印度等国的合作潜力有待进一步发掘

2023-06-17

吉林白城:林草湿“绿网”阻断荒漠化蔓延

2023-06-17

芬兰新一届联合政府组成并公布施政纲领|独家

2023-06-17

6月16日基金净值:博时央企创新驱动ETF最新净值1.4058,涨1.91%|新视野

2023-06-17

慈溪达蓬山主题乐园(慈溪达蓬山地址_全球资讯

2023-06-17

因“密件风波案”面临最高500年刑期!特朗普出庭全程沉默-报道

2023-06-17

世界快消息!苏翊鸣将成清华学子 18岁的三个愿望全部实现

2023-06-17

6月16日基金净值:富国沪港深业绩驱动混合型A最新净值1.6096,涨0.22%|焦点速递

2023-06-17