前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GPT4做数据分析时间序列预测之八相当棒2023.6.1

GPT4做数据分析时间序列预测之八相当棒2023.6.1

作者头像
用户7138673
发布2023-08-16 21:21:49
2960
发布2023-08-16 21:21:49
举报
文章被收录于专栏:大大的小数据大大的小数据

1、用了多种方法预测未来6个月的销售额,并计算了算法的标准差、平均值、与1绝对值求和等验证指标。

2、代码

代码语言:javascript
复制
import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX
from prophet import Prophet
from pmdarima import auto_arima
from statsmodels.tsa.holtwinters import ExponentialSmoothing as ES1
from statsmodels.tsa.api import ExponentialSmoothing as ES2
import numpy as np
from sklearn.svm import SVR

# 读取数据并处理时间
销售数据 = pd.read_excel('销售数据.xlsx')
销售数据['年月'] = pd.to_datetime(销售数据['年月'])
销售数据.set_index('年月', inplace=True)

所有预测 = pd.DataFrame()

for i in range(25, len(销售数据)):
    数据子集 = 销售数据.iloc[:i+1].copy()

    # 获取最后一个销售额
    最后销售额 = [数据子集['本月实际销售金额'].iloc[-1]]

    # 获取最后一个年月
    最后年月 = [数据子集.index[-1]]

    # SARIMA
    SARIMA模型 = SARIMAX(数据子集['本月实际销售金额'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
    SARIMA模型拟合 = SARIMA模型.fit(disp=False)
    SARIMA预测 = SARIMA模型拟合.forecast(steps=6)

    # Prophet
    数据_Prophet = 数据子集.reset_index().rename(columns={'年月': 'ds', '本月实际销售金额': 'y'})
    Prophet模型 = Prophet()
    Prophet模型.fit(数据_Prophet)
    未来 = Prophet模型.make_future_dataframe(periods=6, freq='MS')
    Prophet预测 = Prophet模型.predict(未来)
    Prophet预测数据 = Prophet预测[['ds', 'yhat']].iloc[-6:]

    # ARIMA
    ARIMA模型 = auto_arima(数据子集['本月实际销售金额'], seasonal=True, m=12)
    ARIMA预测 = ARIMA模型.predict(n_periods=6)

    # ExponentialSmoothing方法1
    ES1模型 = ES1(数据子集['本月实际销售金额'], trend='add', seasonal='add', seasonal_periods=12)
    ES1模型拟合 = ES1模型.fit()
    ES1预测 = ES1模型拟合.forecast(steps=6)

    # # ExponentialSmoothing方法2
    # ES2模型 = ES2(数据子集['本月实际销售金额'], trend='add', seasonal='add', seasonal_periods=12)
    # ES2模型拟合 = ES2模型.fit()
    # ES2预测 = ES2模型拟合.forecast(steps=6)

    # SVM
    SVM模型 = SVR()
    时间序列 = np.arange(len(数据子集)).reshape(-1, 1)
    SVM模型.fit(时间序列, 数据子集['本月实际销售金额'].values)
    SVM预测 = SVM模型.predict(np.array([np.arange(len(数据子集), len(数据子集)+6)]).T)

    # # 移动平均预测
    # 数据子集['移动平均'] = 数据子集['本月实际销售金额'].rolling(window=36).mean()
    # 预测_移动平均 = [数据子集['移动平均'].iloc[-1]] * 6  # 使用最后一个移动平均值作为预测值

    预测数据 = pd.DataFrame({
        '数据子集最后年月': 最后年月,
        '预测的年月': [数据子集.index[-1] + pd.DateOffset(months=1)],
        '销售金额': 最后销售额,
        'SARIMA预测销售金额累计值': [sum(SARIMA预测)],
        'Prophet预测销售金额累计值': [Prophet预测数据['yhat'].sum()],
        'ARIMA预测销售金额累计值': [sum(ARIMA预测)],
        'ExponentialSmoothing方法1预测销售金额累计值': [sum(ES1预测)],
        # 'ExponentialSmoothing方法2预测销售金额累计值': [sum(ES2预测)],
        'SVM预测销售金额累计值': [sum(SVM预测)],
        # '移动平均预测销售金额累计值': [sum(预测_移动平均)]
    })

    所有预测 = 所有预测.append(预测数据)

所有预测.to_excel('预测销售数据.xlsx', index=False)

3、使用更多的方法来预测销售额

代码语言:javascript
复制
只有两列数据:年月、每月销售额,有哪些python的时间序列预测方法,实现未来6个月销售额的预测
代码语言:javascript
复制
针对你的数据,以下是一些可以用来进行时间序列预测的方法:

1. SARIMA模型:SARIMA模型是一种基于ARIMA模型的季节性时间序列预测方法,可以用来预测未来的销售额。你可以使用Python中的statsmodels库来实现SARIMA模型。

2. Prophet模型:Prophet是Facebook开发的一种时间序列预测模型,可以用来预测未来的销售额。你可以使用Python中的Prophet库来实现Prophet模型。

3. ARIMA模型:ARIMA模型是一种基于时间序列的预测方法,可以用来预测未来的销售额。你可以使用Python中的statsmodels库来实现ARIMA模型。

4. ExponentialSmoothing模型:ExponentialSmoothing模型是一种基于指数平滑的时间序列预测方法,可以用来预测未来的销售额。你可以使用Python中的statsmodels库来实现ExponentialSmoothing模型。

5. SVM模型:SVM模型是一种基于支持向量机的时间序列预测方法,可以用来预测未来的销售额。你可以使用Python中的scikit-learn库来实现SVM模型。

对于你的数据,你可以使用以上任意一种方法来预测未来6个月的销售额。

4、说说上面几种方法的优缺点

代码语言:javascript
复制
Autoregression (AR) 自回归模型
Moving Average (MA) 移动平均模型
Autoregressive Integrated Moving Average (ARIMA) 自回归积分移动平均模型
Seasonal Decomposition of Time Series (STL) 时间序列的季节性分解
Seasonal and Trend decomposition using Loess (STL) 使用Loess的季节性和趋势分解
Seasonal Exponential Smoothing (SES) 季节性指数平滑
Seasonal Autoregressive Integrated Moving-Average with Exogenous Regressors (SARIMAX) 具有外生回归变量的季节性自回归积分移动平均模型
Exponential Smoothing 指数平滑模型
Holt-Winters Method (Triple Exponential Smoothing) Holt-Winters方法(三重指数平滑)
Prophet (Facebook's library for time series forecasting) Prophet(Facebook的时间序列预测库)
Long Short-Term Memory (LSTM) - Neural Networks 长短期记忆(LSTM)-神经网络
Support Vector Regression (SVR) 支持向量回归(SVR)
代码语言:javascript
复制
1.自回归模型(AR)
2.移动平均模型(MA)
3.自回归积分移动平均模型(ARIMA)
4.时间序列的季节性分解(STL)
5.使用Loess的季节性和趋势分解(STL)
6.季节性指数平滑(SES)
7.具有外生回归变量的季节性自回归积分移动平均模型(SARIMAX)
8.指数平滑模型
9.Holt-Winters方法(三重指数平滑)
10.Prophet(Facebook的时间序列预测库)
11.长短期记忆(LSTM)-神经网络
12.支持向量回归(SVR)

5、在下面代码中增加这些方法,重复的代码就不需要显示了:自回归模型(AR) 移动平均模型(MA) 季节性分解时间序列(STL) Holt-Winters方法(三重指数平滑

增加三种方法

代码语言:javascript
复制
import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX
from prophet import Prophet
from pmdarima import auto_arima
from statsmodels.tsa.holtwinters import ExponentialSmoothing as ES1
from statsmodels.tsa.api import ExponentialSmoothing as ES2
from statsmodels.tsa.ar_model import AutoReg
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.seasonal import STL
from statsmodels.tsa.api import Holt
import numpy as np
from sklearn.svm import SVR

# 读取数据并处理时间
销售数据 = pd.read_excel('销售数据.xlsx')
销售数据['年月'] = pd.to_datetime(销售数据['年月'])
销售数据.set_index('年月', inplace=True)

所有预测 = pd.DataFrame()

for i in range(45, len(销售数据)):
    数据子集 = 销售数据.iloc[:i+1].copy()

    # 获取最后一个销售额
    最后销售额 = [数据子集['本月实际销售金额'].iloc[-1]]

    # 获取最后一个年月
    最后年月 = [数据子集.index[-1]]

    # 自回归模型(AR)
    AR模型 = AutoReg(数据子集['本月实际销售金额'], lags=1)
    AR模型拟合 = AR模型.fit()
    AR预测 = AR模型拟合.predict(start=len(数据子集), end=len(数据子集) + 5)

    # 移动平均模型(MA)
    MA模型 = ARIMA(数据子集['本月实际销售金额'], order=(0, 0, 1))
    MA模型拟合 = MA模型.fit()
    MA预测 = MA模型拟合.forecast(steps=6)

    # 季节性分解时间序列(STL)
    stl = STL(数据子集['本月实际销售金额'], seasonal=13)
    stl_result = stl.fit()
    deseasonalized_data = 数据子集['本月实际销售金额'] - stl_result.seasonal
    STL_ARIMA模型 = ARIMA(deseasonalized_data, order=(1, 1, 0))
    STL_ARIMA模型拟合 = STL_ARIMA模型.fit()
    STL_ARIMA预测 = STL_ARIMA模型拟合.forecast(steps=6)
    STL预测 = STL_ARIMA预测 + stl_result.seasonal.iloc[-6:].values

    # Holt-Winters方法(三重指数平滑)
    HW模型 = ES1(数据子集['本月实际销售金额'], trend='add', seasonal='mul', seasonal_periods=12)
    HW模型拟合 = HW模型.fit()
    HW预测 = HW模型拟合.forecast(steps=6)

    # ... 在此添加其他方法的代码 ...

    预测数据 = pd.DataFrame({
        '数据子集最后年月': 最后年月,
        '预测的年月': [数据子集.index[-1] + pd.DateOffset(months=1)],
        '销售金额': 最后销售额,
        'AR预测销售金额累计值': [sum(AR预测)],
        'MA预测销售金额累计值': [sum(MA预测)],
        'STL预测销售金额累计值': [sum(STL预测)],
        'Holt-Winters预测销售金额累计值': [sum(HW预测)],
        # ... 在此添加其他方法的预测结果 ...
    })

    所有预测 = 所有预测.append(预测数据)

所有预测.to_excel('预测销售数据.xlsx', index=False)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大大的小数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档