网站 网站 建设,工作人员回应游客扔免费午餐,南宁网站建设速成培训,怎么自己做网站吓别人Datawhale干货 作者#xff1a;戳戳龍#xff0c;上海交通大学#xff0c;量化算法工程师前言#x1f534; 平时工作中每天都在和时间序列打交道#xff0c;对时间序列分析进行研究是有必要的#x1f7e1; 分享和交流一些自己的在时序处理方面的心得#xff0c;提供一… 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.weekofyearfor year in df[year].unique():tmp_df df[df[year] year]plt.plot(tmp_df[week_of_year], tmp_df[amt], .-, labelstr(year))plt.legend()plt.show()周期判断如果每隔h个单位ACF值有一个局部高峰则数据存在以h为单位的周期性from statsmodels.graphics.tsaplots import plot_acf
plot_acf(Df[amt], lags500).show()自相关性自相关自相关函数 autocorrelation function 有序的随机变量序列与其自身相比较 自相关函数反映了同一序列在不同时序的取值之间的相关性from statsmodels.graphics.tsaplots import plot_acf
_ plot_acf(Df[amt], lags50)偏自相关from statsmodels.graphics.tsaplots import plot_pacfplot_pacf(Df[amt], lags5)残差外部变量残差Prophet官方文档https://facebook.github.io/prophet/docs/quick_start.html#python-api原理模型结构模型结构——关于时间的广义线性模型g(t):trend,用分段线性函数或逻辑增长曲线(logistic)拟合s(t):seasonality,用傅里叶级数拟合。可以叠加多个季节性如weekly,yearly s s1s2……h(t):regressor用线性函数拟合。可以叠加多个外部变量如节假日、温度、活动h h1h2……:模型残差 不用拟合以上方程也可以写成乘法形式乘法形式和加法形式可以相互转换乘法形式两边取对数就是加法形式趋势分段线性函数线性趋势函数分段线性趋势函数超参数由用户给出分几段参数根据历史数据拟合k曲线增长速率m曲线的截距逻辑增长曲线函数展示https://www.desmos.com/calculator/8pnqou9ojy?langzh-CN超参数C渐近线一共分几段参数k曲线增长速率m拐点对应时间周期性任何周期性函数都可以表示成傅里叶级数超参数由用户给定周期长度常见的周期有、傅里叶级数的阶数越大季节性曲线波动越大越容易过拟合参数由历史数据拟合、系数 函数展示(https://www.desmos.com/calculator/5prck2beq1?langzh-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_scale0.05, daily_seasonalityFalse,yearly_seasonalityTrue, #年周期性weekly_seasonalityTrue, #周周期性
# growthlogistic,)m.add_seasonality(namemonthly, period30.5, fourier_order5, prior_scale0.1)#月周期性m.add_country_holidays(country_nameCN)#中国所有的节假日 m.fit(df)future m.make_future_dataframe(periods30, freqD)#预测时长
# 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,mforecast,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].valuesdf df.set_index(ds)df.plot()return dfdf FPPredict(df_test.tail(200),m)申购赎回金额预测kaggle notebook[1]Purchase Redemption Data.zipimport pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import prophet
from prophet.diagnostics import cross_validation
from prophet.diagnostics import performance_metrics
from prophet.plot import plot_cross_validation_metric
import warnings
warnings.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_scale0.05, daily_seasonalityFalse,yearly_seasonalityTrue, #年周期性weekly_seasonalityTrue, #周周期性
# growthlogistic,)
# m.add_seasonality(namemonthly, period30.5, fourier_order5, prior_scale0.1)#月周期性m.add_country_holidays(country_nameCN)#中国所有的节假日 m.fit(df)future m.make_future_dataframe(periods30, freqD)#预测时长
# 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,mresult_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].valuesdf df.set_index(ds)df.plot()return dfpurchase_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_scale0.05, daily_seasonalityFalse,yearly_seasonalityTrue, #年周期性weekly_seasonalityTrue, #周周期性growthlogistic,)
# m.add_seasonality(namemonthly, period30.5, fourier_order5, prior_scale0.1)#月周期性m.add_country_holidays(country_nameCN)#中国所有的节假日 m.fit(df)future m.make_future_dataframe(periods30, freqD)#预测时长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 forecastresult_redeem FB(data_user_byday)Bonus 时间序列特征工程https://www.heywhale.com/mw/project/63904f5658e3bea6a3e52800EDAimport sweetviz as svdef eda(df, name, targetNone):sweet_report sv.analyze(df, target_feattarget)sweet_report.show_html(f{name}.html)def eda_compare(df1, df2, name, feature, target):feature_config sv.FeatureConfig(force_textfeature, force_catfeature)sweet_report sv.compare(df1, df2, feat_cfgfeature_config, target_feattarget)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干货学习点赞三连↓