关注不迷路,点赞走好运!!!
一、数据魔法学院:奶茶店的时光机
想象你经营着奶茶店"时间の茶"🧋,每天面对这样的灵魂拷问:
明天该备多少珍珠?
周末会下雨影响销量吗?
新品芒果椰椰能成爆款吗?
传统经验就像盲盒游戏,而Pandas的时间序列预测就是你的"时间转换器",让数据开口说话!
import pandas as pd
import numpy as np
生成2024年销售数据(含季节波动和节日效应)
日期轴 = pd.date_range("2024-01-01", "2024-12-31", freq="D")
销量 = 200 + 50*np.sin(2*np.pi*日期轴.dayofyear/365) # 基础波动
销量 += np.where(日期轴.month.isin([6,7,8]), 80, 0) # 夏季加成
销量 += np.where(日期轴.weekday >=5, 30, 0) # 周末效应
销量 = np.round(销量 + np.random.normal(0, 20, len(日期轴))) # 随机扰动
奶茶销售表 = pd.DataFrame({"日期":日期轴, "销量":销量})
print("🔮魔法数据预览:")
print(奶茶销售表.sample(3))
二、数据变形记:让时间开口说话
2.1 时间特征炼金术
日期特征分解
奶茶销售表['月份'] = 奶茶销售表.日期.dt.month
奶茶销售表['星期'] = 奶茶销售表.日期.dt.weekday
奶茶销售表['是否周末'] = 奶茶销售表.星期 >= 5
奶茶销售表['节假日'] = 奶茶销售表.日期.isin(pd.date_range("2024-10-01", periods=7)) # 模拟国庆假期
滞后特征生成
for lag in [1,7,30]:
奶茶销售表[f'销量_滞后{lag}天'] = 奶茶销售表.销量.shift(lag)
print("\n⏳时间魔法矩阵:")
print(奶茶销售表.iloc[30:33, -4:])
2.2 季节波动透视眼
from statsmodels.tsa.seasonal import seasonal_decompose
时间序列分解
分解结果 = seasonal_decompose(奶茶销售表.set_index('日期')['销量'], model='additive')
分解结果.plot()
plt.title("销量成分拆解图")
plt.show()
三、预言家训练营:ARIMA模型实战
3.1 模型参数调优咒语
from statsmodels.tsa.arima.model import ARIMA
黄金参数组合(p,d,q)=(2,1,1)
model = ARIMA(奶茶销售表.销量, order=(2,1,1))
model_fit = model.fit()
print("\n🔮模型诊断报告:")
print(model_fit.summary())
3.2 未来七天预言术
生成预测结果
预测天数 = 7
预测结果 = model_fit.get_forecast(steps=预测天数)
预测区间 = 预测结果.conf_int()
可视化展示
plt.figure(figsize=(12,6))
plt.plot(奶茶销售表.日期, 奶茶销售表.销量, label='历史销量')
plt.plot(pd.date_range("2025-01-01", periods=预测天数),
预测结果.predicted_mean,
'r--', label='预测值')
plt.fill_between(pd.date_range("2025-01-01", periods=预测天数),
预测区间.iloc[:,0],
预测区间.iloc[:,1], color='pink', alpha=0.3)
plt.title("未来七日销量预言")
plt.legend()
plt.show()
四、黑科技升级:XGBoost时间融合
from xgboost import XGBRegressor
特征矩阵构建
特征集 = 奶茶销售表.dropna().drop('日期', axis=1)
X = 特征集.drop('销量', axis=1)
y = 特征集.销量
时间穿越验证(防止数据泄漏)
model_xgb = XGBRegressor()
model_xgb.fit(X[:-预测天数], y[:-预测天数])
预测效果展示
未来特征 = 特征集.iloc[-预测天数:].drop('销量', axis=1)
预测结果_xgb = model_xgb.predict(未来特征)
print("\n🤖XGBoost预测结果:")
print(pd.DataFrame({
"日期": pd.date_range("2025-01-01", periods=预测天数),
"预测销量": np.round(预测结果_xgb)
}))
五、避坑指南:时间魔法师手册
常见陷阱 | 典型症状 | 解药配方 | 原理剖析 |
---|---|---|---|
未来数据泄漏 | 预测准确率虚高 | 时间序列交叉验证 | 避免用未来数据训练模型 |
季节波动忽视 | 预测曲线像心电图 | 增加周期性特征 | 捕捉月/周/季节规律 |
异常值污染 | 预测结果突变 | 3σ原则清洗数据 | 消除极端值干扰 |
静态模型陷阱 | 预测误差随时间增大 | 滚动窗口更新模型 | 适应数据分布变化 |
六、商业魔法:预测驱动经营决策
动态库存建议系统
库存系数 = 1.2 # 安全库存系数
建议采购量 = (预测结果.predicted_mean * 库存系数).astype(int)
print("\n📦智能采购建议:")
采购表 = pd.DataFrame({
"日期": pd.date_range("2025-01-01", periods=预测天数),
"预测销量": 预测结果.predicted_mean.astype(int),
"建议备货量": 建议采购量
})
print(采购表)
生成经营日报
采购表.to_csv("明日采购清单.csv", index=False)
下期预告:
《Pandas动态定价策略:让奶像股票一样智能调价!》——教你用数据驱动价格优化
觉得有用?长按点赞三连击,知识不迷路~