Scikit-learn 零基础学习教程 5 - 监督学习(回归)预测销量

小明的困惑:“每天的销量总是不稳定,有时候面包卖光了,顾客来了买不到;有时候又做太多,卖不完只能扔掉。如果能提前预测明天的销量,我就能控制生产,避免浪费!有没有什么办法能帮我预测明天的销量呢?”

当然有!机器学习的回归算法 就是用来预测连续值(如销量、房价、温度等)的理想工具。在这个章节,我们将教小明如何使用线性回归 来预测每天的销量,并通过数据分析和模型优化来提高预测精度。


5.1 什么是回归?

在机器学习中,回归 (Regression) 是用来预测一个连续数值的算法,比如:

  • 预测房价:一套房子会卖多少钱?
  • 预测气温:明天的气温是多少度?
  • 预测销量:明天的面包销量是多少?

回归 vs. 分类

任务回归 (Regression)分类 (Classification)
预测目标一个具体数值一个类别标签
示例预测明天能卖多少个面包(80 个?100 个?)预测顾客是否会成为忠实会员(是/否)
算法示例线性回归、随机森林回归、XGBoost 回归逻辑回归、决策树、随机森林分类

比喻一下

  • 分类就像是在预测一个人喜欢吃哪种口味的蛋糕(草莓🍓 / 巧克力🍫 / 抹茶🍵)。
  • 回归就像是在预测这个人今天会吃几个蛋糕(1 个?2 个?还是 5 个?)。

小明的目标 是预测每天的销量(具体数值),所以我们要用 回归算法 来解决这个问题!


5.2 影响销量的因素有哪些?

预测销量之前,我们先想想:
哪些因素会影响每天的销量?

影响因素可能的影响
昨天的销量如果昨天卖得很好,今天可能也会不错
天气情况天气晴朗☀️时,顾客更愿意出门消费
是否有促销促销时销量通常会上升 📈
星期几周末的销量可能比工作日高
节假日例如母亲节,蛋糕店销量会大涨!🎂

所以,我们的回归模型的输入特征 (X) 可能包括:

  • yesterday_sales(昨日销量)
  • promotion_flag(是否促销:1=是,0=否)
  • weather_index(天气指数:0=糟糕,1=完美)
  • weekday(星期几)

最终,我们希望找到一个公式:
sales = w 1 × 昨日销量 + w 2 × 是否促销 + w 3 × 天气指数 + w 4 × weekday + b \text{sales} = w_1 \times \text{昨日销量} + w_2 \times \text{是否促销} + w_3 \times \text{天气指数} + w_4 \times \text{weekday} + b sales=w1×昨日销量+w2×是否促销+w3×天气指数+w4×weekday+b
其中:

  • ( w_1, w_2, w_3, w_4 ) 是机器学习模型学到的参数,表示每个因素对销量的影响程度。
  • ( b ) 是偏置项,表示基础销量。

5.3 线性回归:销量预测的第一步

🌟 线性回归的基本概念

线性回归 (Linear Regression) 是最基础的回归算法,它的核心思想是:

  • 找到一条最适合的数据直线,使得模型预测值和实际销量的误差最小。

示例:天气指数 vs. 销量

假设我们收集了过去 10 天的销量数据,并发现天气和销量之间存在一定的线性关系:

天气指数销量
0.2500
0.3700
0.5900
0.71100
0.91300

如果画出天气指数 vs. 销量的散点图,我们会发现数据点大致呈上升趋势

  • 天气指数越高(天气越好),销量越高

此时,线性回归会找出一条最佳拟合直线,例如:
销量 = 1000 × 天气指数 + 200 \text{销量} = 1000 \times \text{天气指数} + 200 销量=1000×天气指数+200

  • 当天气指数 = 0.2 时,预测销量 = 1000×0.2 + 200 = 400
  • 当天气指数 = 0.9 时,预测销量 = 1000×0.9 + 200 = 1100

这样,我们就能利用天气指数预测未来的销量!


5.4 用 Python 训练线性回归模型

现在,我们让小明使用 Python 训练一个线性回归模型,来预测每日销量。

📌 代码示例

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 读取数据
df_sales = pd.read_csv("sales_data.csv")

# 选择特征
X = df_sales[['yesterday_sales', 'promotion_flag', 'weather_index', 'weekday']]
y = df_sales['sales_amount']

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练线性回归模型
lr = LinearRegression()
lr.fit(X_train, y_train)

# 预测测试集的销量
y_pred = lr.predict(X_test)

# 计算模型的误差
mse = mean_squared_error(y_test, y_pred)  # 均方误差
r2 = r2_score(y_test, y_pred)  # R² 分数

print("均方误差 (MSE):", mse)
print("R² 分数:", r2)

5.5 如何评价模型的好坏?

训练完模型后,我们要看看它的表现如何,通常用两个指标:

✅ 1. 均方误差 (MSE)

均方误差(Mean Squared Error, MSE)表示预测值和真实值之间的平均平方误差:
M S E = 1 n ∑ ( 预测值 − 真实值 ) 2 MSE = \frac{1}{n} \sum (预测值 - 真实值)^2 MSE=n1(预测值真实值)2

  • MSE 越小,表示误差越小,模型预测越准。
  • 如果 MSE 太大,说明模型预测不准,可能需要优化。

✅ 2. R² 决定系数

R² 代表模型的拟合优度,表示模型能解释数据变化的程度:
R 2 = 1 − ∑ ( 预测值 − 真实值 ) 2 ∑ ( 真实值 − 平均值 ) 2 R^2 = 1 - \frac{\sum (预测值 - 真实值)^2}{\sum (真实值 - 平均值)^2} R2=1(真实值平均值)2(预测值真实值)2

  • R² 越接近 1,模型越好 🎯
  • R² 接近 0,说明模型预测能力很差

5.6 小明的收获

小明看到 R² 分数后,兴奋地说:

“原来天气、促销和昨天的销量对明天的销量影响这么大!以后天气好时,我就多准备点面包;如果有促销活动,我就提前安排备货!”

机器学习的价值
避免卖不完浪费
避免缺货损失顾客
让数据驱动决策,而不是靠猜测!


5.7 结论

  1. 线性回归可以帮助我们预测每日销量 📈
  2. 天气、促销、昨日销量等因素会影响未来销量 🌤️
  3. 使用 MSE 和 R² 评估模型表现,确保预测准确度 🎯

下一步,我们将探索如何优化模型,提高预测准确率!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山海青风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值