奶茶店销售额预测模型

奶茶店销售额预测模型

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 如何添加新的特征变量?

  1. train_model.py 中修改特征选择部分,添加新的特征列
  2. 重新训练模型
  3. 确保 predict.py 中的数据预处理部分也能处理新的特征

7.4 模型预测结果不准确怎么办?

  • 检查数据质量,确保没有异常值
  • 考虑添加更多的特征变量
  • 尝试使用其他机器学习算法,如决策树、随机森林等
  • 调整模型参数

8. 扩展建议

8.1 模型优化

  • 尝试使用正则化方法(如 Ridge 或 Lasso)减少过拟合
  • 考虑使用多项式特征提高模型非线性拟合能力
  • 尝试其他机器学习算法,比较不同模型的性能

8.2 功能扩展

  • 添加数据可视化功能,展示特征与销售额的关系
  • 实现 Web 界面,方便用户上传数据和查看结果
  • 添加模型监控功能,定期评估模型性能
  • 实现自动重新训练功能,当新数据到来时自动更新模型

8.3 应用场景扩展

  • 预测不同时间段的销售额(如 hourly, daily, weekly)
  • 预测不同店铺的销售额
  • 预测不同产品的销售额

9. 总结

本项目实现了一个完整的销售额预测模型,包括模型训练和预测功能。通过本教程的学习,您应该能够:

  1. 理解线性回归模型的基本原理
  2. 掌握模型训练和评估的流程
  3. 学会使用训练好的模型进行预测
  4. 能够根据实际需求调整和扩展模型

希望本教程对您有所帮助,祝您在数据分析和机器学习的道路上取得进步!

相关推荐
电商API&Tina1 小时前
电商API接口的应用与简要分析||taobao|jd|微店
大数据·python·数据分析·json
向前V2 小时前
Flutter for OpenHarmony轻量级开源记事本App实战:笔记编辑器
开发语言·笔记·python·flutter·游戏·开源·编辑器
snow_star_dream2 小时前
(笔记)VSC python应用--函数补全注释添加
笔记·python
郝学胜-神的一滴2 小时前
Python中的Mixin继承:灵活组合功能的强大模式
开发语言·python·程序人生
叫我:松哥2 小时前
基于python强化学习的自主迷宫求解,集成迷宫生成、智能体训练、模型评估等
开发语言·人工智能·python·机器学习·pygame
2301_764441332 小时前
2025年YOLO算法案例应用领域应用趋势
python·yolo
汗流浃背了吧,老弟!2 小时前
构建RAG系统时,如何选择合适的嵌入模型(Embedding Model)?
人工智能·python·embedding
盐真卿3 小时前
python第四部分:模块(每日更新)
开发语言·python
喵手3 小时前
Python爬虫零基础入门【第九章:实战项目教学·第2节】“接口优先“项目:从 Network 还原 JSON 接口分页!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·接口优先·json接口分页