python - 根据时间序列中的先前频率预测下一个日期
问题描述
我有一个看起来像下面这样的数据框。数据框具有更多功能,但我仅出于简化目的而显示此功能。
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 中获取下一个日期?
解决方案
我认为您遇到了使用线性回归来尝试解决时间序列问题的问题。
想象一下预测房价。我们可以知道卧室的数量,是否有车库,院子的大小,当前的利率,当前的失业率,当前市场上的房屋数量等。最终我们会得到一个很好的预测。
现在假设您想预测未来 6 个月的房价。你仍然知道卧室的数量,以及它是否有车库,但你不知道未来的利率、失业率或市场上会有多少房子。
您可以使用自己的最佳猜测来估计这些(可能使用最佳/最差场景的范围,让使用模型的人决定使用哪个),或者您可以使用时间序列建模方法并使用它来预测未来 6 个月通过了解今天的模式对未来意味着什么。
推荐阅读
- postgresql - 如何在 postgres 中缩短或优化 JOIN 查询
- wordpress - 联系表格 7 更改表格标签输出
- reactjs - 类型“{}”不可分配给类型“postList”
- javascript - 添加事件监听器
- javascript - 为什么我在 chrome 控制台中看不到我的对象反应?
- python - python matplotlib:如何控制y轴的位置
- architecture - 去中心化应用架构
- javascript - 如何在数组中获得 Firestore 收集响应?
- c# - 我们可以将 Microsoft TensorFlow 用作常规 TensorFlow 吗?
- node.js - 第一次设置护照。isAuthenticated() 总是返回 false