用Python预测2020年双十一交易额

共 2702字,需浏览 6分钟

 ·

2020-11-12 21:28

你好,我是林骥。

去年双十一的时候,我曾利用算法预测过阿里巴巴 2019 年双十一交易额,并做了复盘总结(本文结尾处有当时预测和复盘的文章链接)。

今年的双十一,规则发生了很大的变化,从 10 月 21 日就开始预售,11 月 1 日到 3 日启动第一波销售。面对越来越复杂的规则,许多消费者都感觉「智商不够用了」,而那些没时间研究规则的人,将付出更高的价格,形成一种「价格歧视」,这就是经典的商业策略。

另外,市场环境也发生了很大的变化,疫情对双十一的影响到底有多大?是正向的影响还是负向的影响?各种不确定性的因素交织在一起,无疑会大大增加预测的难度。

本文将不去探究这些细节,而是基于一种机器学习的算法,对 2020 年双十一交易额进行预测。重点在于学习和运用 Python,去解决实际的问题,并举一反三,在实战中锻炼数据分析的思维和应用的能力。

1. 安装和导入模块

首先,我们确认安装好了 Python 中的 scikit-learn 模块:

pip install sklearn

要测试模块是否正确安装,可以在 Jupyter Lab 中运行以下代码:

import sklearn as sk

# 查看版本
sk.__version__

如果该模块正确安装,就会输出版本号。

2. 构造和定义数据

其次,我们构造 2009 - 2019 每年的交易额数据框,并定义相应的变量,为下一步调用算法做好准备。

import numpy as np
import pandas as pd

# 生成数据
year = np.array(range(20092020))
data = [0.52,9.36,52,191,350,571,912,1207,1682,2135,2684]
df = pd.DataFrame({'年份': year, '交易额': data})

# x 年份
x = np.array(df.iloc[:, 0]).reshape(-11)

# y 交易额
y = np.array(df.iloc[:, 1])

# z 预测的年份
z = [[2020]]

3. 调用算法和预测

然后,我们调用 sklearn 中的多项式回归算法,其中 degree=2 代表利用「二次多项式」进行拟合。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression

# 用管道的方式调用多项式回归算法
poly_reg = Pipeline([
    ('ploy', PolynomialFeatures(degree=2)),
    ('std_scaler', StandardScaler()),
    ('lin_reg', LinearRegression())
])
poly_reg.fit(x, y)

# 调用算法进行预测
predict = poly_reg.predict(z)

# 输出预测结果
print('预测2020年双十一交易额为 %.0f 亿元' % predict[0])
print('算法评分为 %.6f' % poly_reg.score(x, y))

输出结果为:

预测2020年双十一交易额为 3280 亿元 

算法评分为 0.999632

4. 预测数据可视化

下面用 matplotlib 画一张图,以便更加直观地展现预测的结果:

import matplotlib.pyplot as plt

# 设置图像大小
fig, ax = plt.subplots(figsize=(96))

# 设置正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']

# 绘制散点图
ax.scatter(x, y, color='#00589F', s=100)
ax.scatter(z, predict, color='#F68F00', marker='*', s=260)

# 设置标签字体大小
ax.tick_params(labelsize=16)

# 隐藏边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_color('#999999')
ax.spines['left'].set_color('#999999')

# 绘制预测线
x2 = np.concatenate([x, z])
y2 = poly_reg.predict(x2)
ax.plot(x2, y2, '--', c='#999999')
ax.set_title('\n预测2020年双十一交易额为%.0f亿元\n'%predict[0], fontsize=26, loc='left')

plt.show()


5. 最后的话

以上是基于历史数据进行预测的结果,其中包含 11 月 1 日到 3 日,以及 11 月 11 日,合计四天的总交易额,没有考虑市场环境的变化。

吴军在《浪潮之巅》中说:

几乎所有好的投资人,都不再对资本市场做预测,而是不断根据市场变化做出反应并进行调整。巴菲特如此,索罗斯也是如此。

我们必须承认各种不确定性,并且利用数据和信息去消除它们。对于变化,我们不能过多相信过去经验得到的正统的预测结果,而是要主动地运用控制论的原理,动态地调整我们的工作状态和目标。

虽然数据是动态变化的,但背后的算法是基本不变的,分析思维也是基本不变的。

所以,重新审视我们的目标,应该不是未卜先知,而是运用科学的方法和思维,在拥抱变化的同时,借助数据和信息,尽量消除不确定性,动态调整应对的策略。

往期推荐

如何用人工智能预测双 11 的交易额?

如何评价算法的好坏?


长按下方的二维码,关注林骥的公众号,更多干货早知道。

欢迎加入我的免费知识星球,我每天都会在星球内分享读书笔记和思考感悟,点击左下角的阅读原文即可加入。

浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报