1 概述
机器学习和特征工程可以帮助提高时序预测的精度和效率。机器学习算法可以自动地学习时间序列数据中的模式和趋势,对于复杂的非线性模式,机器学习模型有很好的表达能力,常见的机器学习时序预测算法包括线性回归(LR)、支持向量机(SVM)、随机森林(RF)、XGBoost和LightGBM等。特征工程可以从原始数据中提取出更加有用的特征,用于训练机器学习模型,常见的特征工程方法包括差分、滑动窗口、指数加权平均等。综合使用机器学习和特征工程可以在时序预测中取得更好的效果,并且可以适用于多种时序预测场景。
2 算法展示
2.1 Prophet
Prophet是一种开源的时间序列预测框架,它是由Facebook所开发,可以用于预测具有季节性和非线性趋势的时间序列数据。Prophet的设计目标是使时间序列的预测变得更加容易,同时不需要用户了解复杂的统计学理论或时间序列建模技术。
Prophet的核心思想是将时间序列分解为三个部分:趋势、季节性和假期效应。然后,将每个部分建模为不同的函数形式,并使用拟合和优化技术来估计模型参数。最后,将这三个部分合并到一起,形成最终的时间序列预测模型。
- Prophet的特点如下:
- 灵活性:Prophet可以自动处理复杂的季节性和节假日效应,同时还可以对非线性趋势进行建模。用户只需要提供原始数据和一些相关的信息,就可以轻松地进行预测。
- 可解释性:Prophet提供了丰富的可视化工具,可以帮助用户理解模型的预测结果和影响因素。
- 鲁棒性:Prophet具有很好的鲁棒性,可以自动处理缺失值和异常值,并且可以处理大规模的时间序列数据。
- 易用性:Prophet可以很容易地与Python等编程语言集成,同时还提供了许多实用的API和示例,使用户可以快速上手。
model = Prophet(
add_seasonalities={'name': '时间', 'seasonal_periods': 90, 'fourier_order': 15, 'mode': 'multiplicative'},
country_holidays='CN'
)
for feature in ['CPU利用率', '内存利用率', 'License利用率']:
model.fit(train[f'{feature}'])
backtest = model.historical_forecasts(
series=ts[f'{feature}'],
start=0.75,
forecast_horizon=10,
# retrain=False,
verbose=True,
)
ts[f'{feature}'].plot(label="actual")
backtest.plot(label="backtest (D=10)")
plt.title(label='Prophet')
plt.legend()
plt.show()
2.2 LR
线性回归是一种用于拟合数据并预测未来趋势的常见统计学方法。在时序预测中,线性回归可以使用历史数据来建立一个线性模型,从而预测未来的趋势。它通过最小化残差平方和来优化模型参数,并且能够处理少量特征和样本数据。然而,线性回归在面对非线性关系和异常值时可能表现不佳,而且其预测精度也比较有限。尽管如此,基于线性回归的方法仍然被广泛应用于各种领域的时序预测问题中。
model = LinearRegressionModel(lags=15, random_state=42, output_chunk_length=13)
model.fit(train)
backtest = model.historical_forecasts(
series=ts,
start=0.75,
forecast_horizon=10,
# retrain=False,
verbose=True,
)
ts.plot(label="actual")
backtest.plot(label="backtest (D=10)")
plt.title(label='LR')
plt.legend()
plt.show()
2.3 SVM
支持向量机(SVM)是一种常见的非线性分类和回归方法。在时序预测中,SVM可以使用历史数据来建立一个非线性模型,从而预测未来的趋势。它通过构建超平面来区分正负样本,并且能够处理少量特征和样本数据。与其他机器学习算法相比,SVM具有较高的准确性和泛化能力,适用于各种复杂数据集的预测问题。但是,SVM训练时间较长,需要调整一些参数来优化模型性能。
2.4 RF
随机森林(RF)是一种基于决策树的集成学习算法,可以用于时序预测问题。它通过使用历史数据来建立多个决策树模型,并通过取平均值或投票来合并各模型的预测结果,从而提高预测精度和泛化性能。随机森林能够处理大量特征和样本数据,并且具有较好的鲁棒性和可解释性。此外,它还支持多种损失函数和评估指标,可以根据具体需求进行选择。
model = RandomForest(lags=15, random_state=42, output_chunk_length=13)
model.fit(train)
backtest = model.historical_forecasts(
series=ts,
start=0.75,
forecast_horizon=10,
# retrain=False,
verbose=True,
)
ts.plot(label="actual")
backtest.plot(label="backtest (D=10)")
plt.title(label='RF')
plt.legend()
plt.show()
2.5 CatBoost
CatBoost是一种基于梯度提升树的机器学习框架,特别适合于处理分类和回归问题。对于时序预测问题,CatBoost可以利用其自然地处理时间序列数据的能力进行建模。它支持各种特征处理技术和模型参数调优方法,以提高预测性能。CatBoost还具有处理缺失值和异常值的能力,以及进行交叉验证和模型解释的工具。
model = CatBoostModel(lags=30, random_state=42)
model.fit(train)
backtest = model.historical_forecasts(
series=ts,
start=0.75,
forecast_horizon=10,
# retrain=False,
verbose=True,
)
ts.plot(label="actual")
backtest.plot(label="backtest (D=10)")
plt.title(label='CatBoost')
plt.legend()
plt.show()
2.6 XGBoost
XGBoost是一种基于决策树的机器学习算法,具有高效性和准确性。在时序预测中,XGBoost可以通过使用历史数据来预测未来的趋势,并且能够自动调整模型参数以适应不同的数据集,从而提高预测的准确性。它还支持多种损失函数和评估指标,如均方根误差和平均绝对误差等。此外,XGBoost还具有可扩展性和灵活性,能够处理大量特征和样本数据。
model = XGBModel(lags=15, random_state=42)
model.fit(train)
backtest = model.historical_forecasts(
series=ts,
start=0.75,
forecast_horizon=10,
# retrain=False,
verbose=True,
)
ts.plot(label="actual")
backtest.plot(label="backtest (D=10)")
plt.title(label='XGBoost')
plt.legend()
plt.show()
2.7 LightGBM
LightGBM是一种基于决策树的机器学习算法,能够在时序预测中有效地处理大量的特征和样本数据,它使用了一些优化技术,如GOSS和EFB,来加快训练速度和提高准确性。在时序预测中,LightGBM可以通过使用历史数据来预测未来的趋势,并且能够自动调整模型参数以适应不同的数据集,从而提高预测的准确性。此外,LightGBM还支持多种损失函数和评估指标,可以根据具体需求进行选择。
model = LightGBMModel(lags=15, random_state=42)
model.fit(train)
backtest = model.historical_forecasts(
series=ts,
start=0.75,
forecast_horizon=10,
# retrain=False,
verbose=True,
)
ts.plot(label="actual")
backtest.plot(label="backtest (D=10)")
plt.title(label='LightGBM')
plt.legend()
plt.show()
本文暂时没有评论,来添加一个吧(●'◡'●)