奶茶店销售额预测模型
1. 项目概述
本项目实现了一个基于线性回归的销售额预测模型,用于预测奶茶店的销售额。
模型使用销量、客单价、是否周末和是否促销作为特征变量,通过训练得到预测结果。
1.1 项目特点
- 模块化设计,模型训练与预测分离
- 支持单条数据预测和批量预测
- 提供直观的命令行界面
- 完整的模型评估和信息保存
- 良好的代码注释和文档
2. 文件结构
奶茶店销售额预测/
├── data.csv # 原始数据文件
├── train_model.py # 模型训练脚本
├── predict.py # 模型预测脚本
├── sales_prediction_model.pkl # 训练好的模型文件
├── model_info.json # 模型信息文件
└── predictions.csv # 批量预测结果文件
3. 环境搭建
3.1 安装 Python
确保您的系统已安装 Python 3.12 或更高版本。
3.2 安装依赖包
使用以下命令安装项目所需的依赖包:
bash
pip install pandas numpy scikit-learn joblib
4. 模型训练(train_model.py)
4.1 核心功能
train_model.py 负责训练线性回归模型并保存结果,主要功能包括:
- 读取和预处理数据
- 划分训练集和测试集
- 训练线性回归模型
- 评估模型性能
- 保存模型和模型信息
4.2 代码解析
4.2.1 导入依赖包
python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error
import joblib
pandas:用于数据读取和处理numpy:用于数值计算sklearn:提供机器学习算法和评估指标joblib:用于模型保存和加载
4.2.2 模型训练函数
python
def train_sales_prediction_model():
# 1. 读取数据
df = pd.read_csv('data.csv')
# 2. 数据预处理
df['是否周末'] = df['是否周末'].astype(int)
df['是否促销'] = df['是否促销'].astype(int)
# 3. 选择特征和目标变量
X = df[['销量', '客单价', '是否周末', '是否促销']]
y = df['销售额']
# 4. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 5. 训练线性回归模型
lr_model = LinearRegression()
lr_model.fit(X_train, y_train)
# 6. 模型评估
y_pred = lr_model.predict(X_test)
r2 = r2_score(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
# 7. 保存模型
joblib.dump(lr_model, 'sales_prediction_model.pkl')
# 8. 保存模型信息
model_info = {
'r2_score': r2,
'mse': mse,
'coefficients': lr_model.coef_.tolist(),
'intercept': lr_model.intercept_,
'features': list(X.columns),
'model_version': '1.0',
'training_date': pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S')
}
import json
with open('model_info.json', 'w', encoding='utf-8') as f:
json.dump(model_info, f, ensure_ascii=False, indent=2)
4.3 运行模型训练
在项目目录下执行以下命令:
bash
python train_model.py
训练完成后,将生成两个文件:
sales_prediction_model.pkl:训练好的模型model_info.json:模型信息
5. 模型应用(predict.py)
5.1 核心功能
predict.py 负责加载训练好的模型并进行预测,主要功能包括:
- 加载模型和模型信息
- 支持单条数据预测
- 支持批量数据预测
- 提供命令行界面
- 显示模型信息
5.2 代码解析
5.2.1 导入依赖包
python
import joblib
import pandas as pd
import argparse
import json
5.2.2 SalesPredictor 类
python
class SalesPredictor:
def __init__(self, model_path='sales_prediction_model.pkl'):
# 初始化预测器,加载模型
def load_model(self, model_path):
# 加载训练好的模型
def load_model_info(self):
# 加载模型信息
def predict(self, data):
# 使用模型进行预测
def predict_single(self, sales_volume, unit_price, is_weekend, is_promotion):
# 预测单条数据
def predict_from_csv(self, input_csv, output_csv=None):
# 从CSV文件批量预测
def show_model_info(self):
# 显示模型信息
5.2.3 命令行界面
python
def main():
parser = argparse.ArgumentParser(description='销售额预测工具')
subparsers = parser.add_subparsers(dest='command', help='可用命令')
# 单条预测命令
predict_parser = subparsers.add_parser('predict', help='预测单条数据')
predict_parser.add_argument('--volume', type=float, required=True, help='销量')
predict_parser.add_argument('--price', type=float, required=True, help='客单价')
predict_parser.add_argument('--weekend', type=int, choices=[0, 1], required=True, help='是否周末 (0/1)')
predict_parser.add_argument('--promotion', type=int, choices=[0, 1], required=True, help='是否促销 (0/1)')
# 批量预测命令
batch_parser = subparsers.add_parser('batch', help='批量预测')
batch_parser.add_argument('--input', type=str, required=True, help='输入CSV文件路径')
batch_parser.add_argument('--output', type=str, help='输出CSV文件路径')
# 显示模型信息命令
info_parser = subparsers.add_parser('info', help='显示模型信息')
args = parser.parse_args()
# 执行命令...
6. 使用示例
6.1 显示模型信息
bash
python predict.py info
输出示例:
✓ 成功加载模型:sales_prediction_model.pkl
✓ 成功加载模型信息
==================================================
📊 模型信息
==================================================
r2_score: 0.9614
mse: 1640.76
系数:销量: 15.40, 客单价: 31.05, 是否周末: 1.53, 是否促销: -0.20
intercept: -478.99
features: ['销量', '客单价', '是否周末', '是否促销']
model_version: 1.0
training_date: 2026-01-25 15:21:41
==================================================
6.2 单条数据预测
bash
python predict.py predict --volume 30 --price 15 --weekend 0 --promotion 1
输出示例:
✓ 成功加载模型:sales_prediction_model.pkl
✓ 成功加载模型信息
💰 预测结果:
销量:30.0
客单价:15.0
是否周末:0
是否促销:1
预测销售额:448.44
6.3 批量数据预测
bash
python predict.py batch --input data.csv --output predictions.csv
输出示例:
✓ 成功加载模型:sales_prediction_model.pkl
✓ 成功加载模型信息
✓ 读取输入文件:data.csv,共 3000 条记录
✓ 预测结果已保存到:predictions.csv
📋 预测结果概览:
销量 客单价 预测销售额
count 3000.000000 3000.000000 3000.000000
mean 30.932333 15.474667 478.125160
std 11.827386 3.311850 207.361706
min 10.000000 10.000000 0.866015
25% 22.000000 13.000000 325.905314
50% 29.000000 15.000000 464.035995
75% 39.000000 18.000000 617.662330
max 81.000000 22.000000 1206.178082
7. 常见问题解答
7.1 如何更换训练数据?
将新的数据文件命名为 data.csv 并替换原有文件,然后重新运行 train_model.py。
7.2 如何调整模型参数?
修改 train_model.py 中的 train_test_split 函数的 test_size 参数可以调整测试集比例,修改 random_state 参数可以改变随机种子。
7.3 如何添加新的特征变量?
- 在
train_model.py中修改特征选择部分,添加新的特征列 - 重新训练模型
- 确保
predict.py中的数据预处理部分也能处理新的特征
7.4 模型预测结果不准确怎么办?
- 检查数据质量,确保没有异常值
- 考虑添加更多的特征变量
- 尝试使用其他机器学习算法,如决策树、随机森林等
- 调整模型参数
8. 扩展建议
8.1 模型优化
- 尝试使用正则化方法(如 Ridge 或 Lasso)减少过拟合
- 考虑使用多项式特征提高模型非线性拟合能力
- 尝试其他机器学习算法,比较不同模型的性能
8.2 功能扩展
- 添加数据可视化功能,展示特征与销售额的关系
- 实现 Web 界面,方便用户上传数据和查看结果
- 添加模型监控功能,定期评估模型性能
- 实现自动重新训练功能,当新数据到来时自动更新模型
8.3 应用场景扩展
- 预测不同时间段的销售额(如 hourly, daily, weekly)
- 预测不同店铺的销售额
- 预测不同产品的销售额
9. 总结
本项目实现了一个完整的销售额预测模型,包括模型训练和预测功能。通过本教程的学习,您应该能够:
- 理解线性回归模型的基本原理
- 掌握模型训练和评估的流程
- 学会使用训练好的模型进行预测
- 能够根据实际需求调整和扩展模型
希望本教程对您有所帮助,祝您在数据分析和机器学习的道路上取得进步!