fondo
Recientemente, la empresa hizo algunas predicciones de datos para los clientes, pero los clientes no sabían cuáles eran más adecuados para ellos, por lo que después de comunicarse con el lado comercial, se centraron en dos aspectos de los datos.
1. Datos de ingeniería: es una buena idea evaluar los datos de ingeniería y luego hacer advertencias tempranas, pero debido a que los datos en esta área están incompletos y hay algunas desviaciones en la precisión de los datos, nos rendimos.
2. Datos financieros: los datos financieros son una muy buena dirección. En primer lugar, los datos financieros son muy precisos y la regularidad es relativamente obvia.
Así que finalmente elegí la perspectiva del análisis de datos financieros.
Nota: Todos los datos de este artículo son datos virtuales. Los datos financieros mencionados anteriormente son solo para explicar cómo analizar esta dirección comercial.
Introducción
Con base en lo anterior, probablemente hablaré sobre la dirección de esta predicción:
Dado que el blogger se dedica principalmente a Java y Spark (Scala), usa relativamente poco Python. Si hay algún error en el proceso, critíquelo y corríjalo. Presentaremos a los desarrolladores novatos que son nuevos en la industria cómo usar Python para implementar modelos de predicción AR (autorregresivos). El modelo AR es un modelo comúnmente utilizado en el pronóstico de series temporales que predice valores futuros basándose en observaciones pasadas .
Seguiremos los pasos a continuación.
paso | describir |
1 | Importar bibliotecas requeridas |
2 | Cargar datos de series de tiempo |
3 | Divida el conjunto de datos en conjunto de entrenamiento y conjunto de prueba |
4 | Entrenar modelo AR |
5 | Predecir valores futuros utilizando modelos AR |
6 | Evaluar el rendimiento del modelo |
7 | Visualizar resultados de predicción |
Código:
Importar bibliotecas requeridas
Primero, necesitamos importar algunas bibliotecas necesarias, incluidos pandas para el procesamiento de datos y statsmodels para construir modelos AR.
from statsmodels.tsa.ar_model import AR
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from pandas import Series,DataFrame
Cargar datos de series de tiempo
def data_process():
#接受csv格式数据,根据情况修改为自己的地址
df = pd.read_csv(r"C:\Users\123\Downloads\funsbymonth.csv")
fans = df['fans'].values
data=pd.Series(fans)
df['date'] = pd.to_datetime(df['date'])
data_index = df['date'].values
data.index =pd.Index(data_index)
#data.plot(figsize=(12,8))
#plt.show()
return data,fans
#数据处理
data,fans = data_process()
He encapsulado un método para esto, solo como referencia.
También proporciono los datos para que todos los aprendan y utilicen. Puedes recogerlos si los necesitas.
date,fans
2021-6-30,12
2021-7-31,52
2021-8-31,58
2021-9-30,82
2021-10-31,65
2021-11-30,66
2021-12-31,16
2022-1-31,23
2022-2-28,54
2022-3-31,61
2022-4-30,78
2022-5-31,64
2022-6-30,56
2022-7-31,18
2022-8-31,16
2022-9-30,60
2022-10-31,75
2022-11-30,90
2022-12-31,63
2023-1-31,69
2023-2-28,15
2023-3-31,10
2023-4-30,60
2023-5-31,62
2023-6-30,78
2023-7-31,71
Dividir el conjunto de datos
Antes de construir el modelo AR, debemos dividir el conjunto de datos en un conjunto de entrenamiento y un conjunto de prueba. Generalmente, utilizamos la mayoría de los datos para entrenar el modelo y una pequeña parte de los datos para probar el efecto de predicción del modelo. Aquí asumimos que el primer 80% de los datos se usa para entrenamiento y el último 20% de los datos se usa para pruebas.
train_data = data.iloc[:int(0.8*len(data))]
test_data = data.iloc[int(0.8*len(data)):]
Entrene el modelo AR y prediga
A continuación, podemos utilizar los datos del conjunto de entrenamiento para entrenar el modelo AR. Aquí, utilizamos la biblioteca statsmodels para construir modelos AR.
def model_fit3(data,start,end,starTime):
ar = AR(data).fit()
arpredict_y3 =ar.predict(start=start, end=end ,dynamic = False)
fig, ax = plt.subplots(figsize=(12, 8))
ax = data.ix[starTime:].plot(ax=ax)
arpredict_y3.plot(ax=ax)
plt.show()
return arpredict_y3
start = 10
end = len(fans)+3
starTime = '2022-1-31'
arpredict_y = model_fit3(data,start,end,starTime)
Visualizar resultados
https://blog.51cto.com/u_16175449/6933670
https://blog.51cto.com/u_16175427/6815175
https://bbs.csdn.net/topics/392418314
https://blog.csdn.net/weixin_44034053/article/details/94359052
https://blog.51cto.com/u_13389043/6230021
https://blog.51cto.com/u_13389043/6230021
Aquí proporciono un modelo: modelo autorregresivo AutoReg
Mire el código, el conjunto de datos sigue siendo el conjunto de datos anterior
import pandas as pd
from statsmodels.tsa.ar_model import AutoReg
import matplotlib.pyplot as plt
def data_process():
#接受csv格式数据,根据情况修改为自己的地址
df = pd.read_csv(r"C:\Users\allen_sun\Downloads\funsbymonth.csv")
fans = df['fans'].values
data=pd.Series(fans)
df['date'] = pd.to_datetime(df['date'])
data_index = df['date'].values
data.index =pd.Index(data_index)
#data.plot(figsize=(12,8))
#plt.show()
return data,fans
#数据处理
data,fans = data_process()
train_data = data.iloc[:int(0.8*len(data))]
test_data = data.iloc[int(0.8*len(data)):]
#模型训练
order = 9 # AR模型的阶数为2
model = AutoReg(train_data, lags=order)
model_fit = model.fit()
#模型预测
predictions = model_fit.predict(start=len(train_data), end=len(data)-1)
#模型评估
from sklearn.metrics import mean_squared_error, mean_absolute_error
#均方误差(MSE),结果越小越好
mse = mean_squared_error(test_data, predictions)
#平均绝对误差(MAE), 结果越小越好
mae = mean_absolute_error(test_data, predictions)
mse
mae
#print(predictions)
#预测起止点
start = 10
#预测长度,此长度表示向后预测4个阶段
end = len(fans)+3
order = 9 # AR模型的阶数为2
model = AutoReg(train_data, lags=order)
model_fit = model.fit()
arpredict_y3 =model_fit.predict(start=start, end=end ,dynamic = False)
fig, ax = plt.subplots(figsize=(12, 8))
#python自带的绘制曲线开始日期
starTime = '2022-1-31'
ax = data.ix[starTime:].plot(ax=ax)
arpredict_y3.plot(ax=ax)
plt.show()
Parámetros en elementos de evaluación:
1. Error cuadrático medio (MSE), cuanto menor sea el resultado, mejor.
2. Error cuadrático medio (RMSE), cuanto menor sea el resultado, mejor.
3. Error absoluto medio (MAE), cuanto menor sea el resultado, mejor.
4. Error porcentual absoluto medio (MAPE), cuanto menor sea el resultado, mejor.
Efecto: (También está bien)