首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python预测2020年双十一交易额

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

作者头像
朱小五
发布2020-11-13 09:48:58
1.5K0
发布2020-11-13 09:48:58
举报
文章被收录于专栏:凹凸玩数据凹凸玩数据

作者:林骥

去年双十一的时候,我曾复盘过阿里巴巴 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(2009, 2020))
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(-1, 1)

# 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=(9, 6))

# 设置正常显示中文标签
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 日,合计四天的总交易额,没有考虑市场环境的变化。

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

几乎所有好的投资人,都不再对资本市场做预测,而是不断根据市场变化做出反应并进行调整。巴菲特如此,索罗斯也是如此。 我们必须承认各种不确定性,并且利用数据和信息去消除它们。对于变化,我们不能过多相信过去经验得到的正统的预测结果,而是要主动地运用控制论的原理,动态地调整我们的工作状态和目标。

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 凹凸数据 微信公众号,前往查看

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

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

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