网易首页 > 网易号 > 正文 申请入驻

将梯度提升模型与 Prophet 相结合可以提升时间序列预测的效果

0
分享至

将Prophet的预测结果作为特征输入到 LightGBM 模型中进行时序的预测

我们以前的关于使用机器学习进行时间序列预测的文章中,都是专注于解释如何使用基于机器学习的方法进行时间序列预测并取得良好结果。

但是在这篇文章将使用更高级的技术来预测时间序列,本文将使用 Prophet 来提取新的有意义的特征,例如季节性、置信区间、趋势等。

时间序列预测

一般情况下 LightGBM 模型都会使用一些lag的特征来预测未来的结果,这样做一般情况下能够取得很好的效果。 本文介绍一种新的思路:使用 Prophet 从时间序列中提取新特征,然后使用LightGBM 进行训练,可以得到更好的效果。 Prophet 模型的实际预测、置信区间的上限和下限、每日和每周的季节性和趋势等都可以作为我们的新特征。 对于其他类型的问题,Prophet 还可以帮助我们提取描述假日效果。

原始数据

我们的数据如下所示:

使用 Prophet 提取特征

我们特征工程的第一步非常简单。 我们只需要使用Prophet 模型进行预测:

def prophet_features(df, horizon=24*7):
temp_df = df.reset_index()
temp_df = temp_df[['datetime', 'count']]
temp_df.rename(columns={'datetime': 'ds', 'count': 'y'}, inplace=True)
#take last week of the dataset for validation
train, test = temp_df.iloc[:-horizon,:], temp_df.iloc[-horizon:,:]
#define prophet model
m = Prophet(
growth='linear',
seasonality_mode='additive',
interval_width=0.95,
daily_seasonality=True,
weekly_seasonality=True,
yearly_seasonality=False
)
#train prophet model
m.fit(train)
#extract features from data using prophet to predict train set
predictions_train = m.predict(train.drop('y', axis=1))
#extract features from data using prophet to predict test set
predictions_test = m.predict(test.drop('y', axis=1))
#merge train and test predictions
predictions = pd.concat([predictions_train, predictions_test], axis=0)
return predictions

上面的函数将返回一个给我们的 LightGBM 模型准备的新特征的DF:

使用 Prophet 特征训练 Autorregressive LightGBM

我们使用 Prophet 提取了新特征,下一步就是进行特征的合并和使用 LightGBM 进行预测:

def train_time_series_with_folds_autoreg_prophet_features(df, horizon=24*7, lags=[1, 2, 3, 4, 5]):
#create a dataframe with all the new features created with Prophet
new_prophet_features = prophet_features(df, horizon=horizon)
df.reset_index(inplace=True)
#merge the Prophet features dataframe with the our first dataframe
df = pd.merge(df, new_prophet_features, left_on=['datetime'], right_on=['ds'], how='inner')
df.drop('ds', axis=1, inplace=True)
df.set_index('datetime', inplace=True)
#create some lag variables using Prophet predictions (yhat column)
for lag in lags:
df[f'yhat_lag_{lag}'] = df['yhat'].shift(lag)
df.dropna(axis=0, how='any')
X = df.drop('count', axis=1)
y = df['count']
#take last week of the dataset for validation
X_train, X_test = X.iloc[:-horizon,:], X.iloc[-horizon:,:]
y_train, y_test = y.iloc[:-horizon], y.iloc[-horizon:]
#define LightGBM model, train it and make predictions
model = LGBMRegressor(random_state=42)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
#calculate MAE
mae = np.round(mean_absolute_error(y_test, predictions), 3)
#plot reality vs prediction for the last week of the dataset
fig = plt.figure(figsize=(16,6))
plt.title(f'Real vs Prediction - MAE {mae}', fontsize=20)
plt.plot(y_test, color='red')
plt.plot(pd.Series(predictions, index=y_test.index), color='green')
plt.xlabel('Hour', fontsize=16)
plt.ylabel('Number of Shared Bikes', fontsize=16)
plt.legend(labels=['Real', 'Prediction'], fontsize=16)
plt.grid()
plt.show()

执行上述代码后,我们将合并特征df,创建滞后的lag值,训练 LightGBM 模型,然后用我们训练的模型进行预测,将我们的预测与实际结果进行比较。 输出将如下所示:

如果我们仔细观察结果我们的 MAE 为 28.665。这要比一般特征工程结果有很大的提高。

总结

将监督机器学习方法与 Prophet 等统计方法相结合,可以帮助我们取得令人印象深刻的结果。 根据我在现实世界项目中的经验,很难在需求预测问题中获得比这些更好的结果。

https://www.overfit.cn/post/4f12535a96ac41fb98e8b7820a0cda5f

作者:Unai López Ansoleaga

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
100个代表团与会,1000多万美元的开销

100个代表团与会,1000多万美元的开销

寰宇大观察
2024-06-15 15:45:20
同村人评价火爆全网的“数学天才少女”:孩子聪明又懂事

同村人评价火爆全网的“数学天才少女”:孩子聪明又懂事

央广网
2024-06-16 00:30:04
荒诞!医学院老师因紧急救人致上课迟到,被罚2000元和评优资格?

荒诞!医学院老师因紧急救人致上课迟到,被罚2000元和评优资格?

走读新生
2024-06-16 00:04:47
开始了!俄罗斯军人亲属呼吁官员儿子顶替亲人

开始了!俄罗斯军人亲属呼吁官员儿子顶替亲人

亡海中的彼岸花
2024-06-15 08:56:51
银行副行长误将女员工表白视频群发,两人相差20岁,官方发声力挺

银行副行长误将女员工表白视频群发,两人相差20岁,官方发声力挺

求实者
2024-06-14 22:18:32
上海这种事也越来越多了!

上海这种事也越来越多了!

吴女士
2024-06-15 14:02:29
G7发布联合声明,不许中国援俄,不许武力收台,也不许反制菲律宾

G7发布联合声明,不许中国援俄,不许武力收台,也不许反制菲律宾

贺文萍
2024-06-15 16:53:41
何谓“法律面前人人平等”?美国司法界判拜登儿子和特朗普都有罪

何谓“法律面前人人平等”?美国司法界判拜登儿子和特朗普都有罪

爆角追踪
2024-06-15 22:57:15
563支AI队伍和姜萍答了同一份试卷:最高34分,无一入围决赛

563支AI队伍和姜萍答了同一份试卷:最高34分,无一入围决赛

经济观察报
2024-06-15 19:56:17
数学老师说姜萍属于勤奋型选手,中考数学没答完卷,数学天赋在中专才逐渐显现出来

数学老师说姜萍属于勤奋型选手,中考数学没答完卷,数学天赋在中专才逐渐显现出来

封面新闻
2024-06-15 15:40:29
瑞士峰会传来消息,好家伙,幸亏中国没去参加,普京早就布好局了

瑞士峰会传来消息,好家伙,幸亏中国没去参加,普京早就布好局了

千里持剑
2024-06-15 12:53:07
追梦回应克莱取关勇士:我觉得这很好笑 你们都想看有人感到受伤

追梦回应克莱取关勇士:我觉得这很好笑 你们都想看有人感到受伤

罗说NBA
2024-06-16 05:19:26
网传:焚烧电动车现场,黑烟滚滚,网友纳闷,专家学者集体沉默!

网传:焚烧电动车现场,黑烟滚滚,网友纳闷,专家学者集体沉默!

眼光很亮
2024-06-16 08:01:14
倒查30年后补税是个危险信号

倒查30年后补税是个危险信号

深度财线
2024-06-15 22:03:47
税太高了?一家企业要交13%增值税、25%企业所得税、20%分红税

税太高了?一家企业要交13%增值税、25%企业所得税、20%分红税

小蜜情感说
2024-06-16 07:50:02
幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

幸亏当年没答应爱因斯坦,否则云南省,可能就成了现在的巴勒斯坦

赢梯
2024-06-13 09:43:08
格兰德:克罗斯当时想要与格策持平的薪水,他如今是最成功的球员

格兰德:克罗斯当时想要与格策持平的薪水,他如今是最成功的球员

直播吧
2024-06-16 09:04:20
闹大了!陈芋汐代言李宁,造型酷似日本风,网友直接炸锅了

闹大了!陈芋汐代言李宁,造型酷似日本风,网友直接炸锅了

吃鱼思故渊
2024-06-15 21:49:52
欧洲杯被中文广告包围?破案了:均为虚拟广告牌,与现场不一样!

欧洲杯被中文广告包围?破案了:均为虚拟广告牌,与现场不一样!

风过乡
2024-06-15 16:53:50
冒充职业球员?欧洲杯惊现200多斤大胖子 当年差点加盟中超

冒充职业球员?欧洲杯惊现200多斤大胖子 当年差点加盟中超

球事百科吖
2024-06-16 00:04:33
2024-06-16 11:00:49
deephub
deephub
CV NLP和数据挖掘知识
1369文章数 1416关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

40余套房屋涉嫌"一房多卖" 有购房者内心积郁因病去世

头条要闻

40余套房屋涉嫌"一房多卖" 有购房者内心积郁因病去世

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

东风奕派eπ008售21.66万元 冰箱彩电都配齐

态度原创

艺术
教育
家居
房产
公开课

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

教育要闻

计算机专业,会是下一个土木吗?

家居要闻

空谷来音 朴素留白的侘寂之美

房产要闻

万华对面!海口今年首宗超百亩宅地,重磅挂出!

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版