首页 > 解决方案 > 根据时间序列中的先前频率预测下一个日期

问题描述

我有一个看起来像下面这样的数据框。数据框具有更多功能,但我仅出于简化目的而显示此功能。

    CODE    DATE        IND_AVG_MONTH_REC     IND_STD_MONTH_REC 
0   15295   2021-01-22  0.375                 0.382733
1   15801   2020-12-04  0.125                 0.309359
2   23369   2021-01-01  0.750                 0.216506

AVG 和 STD 是每个 COD 的每月平均值和标准差。DATE 是用户最后一次有活动的时间。我想根据 AVG 和最后日期预测下一个日期。

为此,我进行了线性回归并得到了预测频率。我对结果很满意,因为从预测到测试集的误差很小。(所有值都是整数或浮点数)

# Not all features fom the data set were used
X = df[['IND_MIN_REC_VAL', 'IND_TOTAL_TERM_CALL_QTY', 'IND_TOTAL_ORIG_CALL', 'IND_VAL_LAST_REC', 'OLD', 'IND_SMS_QTY', 'IND_TOTAL_SMS_QTY', 'IND_MIN_REC_QTY_DAY', 'IND_TOTAL_GPRS_QTY', 'IND_GPRS_QTY', 'IND_AVG_MONTH_GPRS_QTY', 'IND_AVG_MONTH_SMS', 'IND_STD_MONTH_SMS', 'IND_STD_MONTH_GPRS_QTY', 'IND_QTD_LAST_REC', 'COD_TAR', 'COD_CART', 'IND_TERM_CALL_QTY', 'IND_MAX_REC_VAL', 'IND_AVG_TERM_CALL_DUR', 'IND_STD_TERM_CALL_DUR', 'IND_ORIG_CALL_QTY', 'IND_AVG_MONTH_TERM_CALL', 'IND_STD_MONTH_TERM_CALL', 'IND_MAX_REC_QTY_DAY', 'IND_AVG_ORIG_CALL_DUR', 'IND_STD_ORIG_CALL_DUR', 'IND_AVG_MONTH_PRIG_CALL', 'IND_STD_ORIG_CALL', 'IND_AVG_GPRS_DUR', 'IND_STD_GPRS_DUR', 'IND_STD_MONTH_REC_VAL', 'IND_STD_MONTH_REC', 'IND_AVG_MONTH_REC_VAL']]
y = df['IND_AVG_MONTH_REC']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

model = LinearRegression().fit(X_train, y_train)

y_preds = model.predict((X_test))

然后计算错误指标并得到以下我满意的结果:

MAE: 0.11467427514645877
MSE: 0.03279457004316404
RMSE: 0.1810927111817702

看到我已经有了预测的频率,如何获得下一个(预测的)日期?

有没有办法输入最后日期和预测频率并在 python/pandas 中获取下一个日期?

标签: pythonpandasmachine-learningscikit-learntime-series

解决方案


我认为您遇到了使用线性回归来尝试解决时间序列问题的问题。

想象一下预测房价。我们可以知道卧室的数量,是否有车库,院子的大小,当前的利率,当前的失业率,当前市场上的房屋数量等。最终我们会得到一个很好的预测。

现在假设您想预测未来 6 个月的房价。你仍然知道卧室的数量,以及它是否有车库,但你不知道未来的利率、失业率或市场上会有多少房子。

您可以使用自己的最佳猜测来估计这些(可能使用最佳/最差场景的范围,让使用模型的人决定使用哪个),或者您可以使用时间序列建模方法并使用它来预测未来 6 个月通过了解今天的模式对未来意味着什么。


推荐阅读