Machine Learning: 项目设计 — SalesPredict全链路规划指南

好的开始是成功的一半——系统设计决定项目成败,动手前先画好蓝图。

1. 你将学到


2. 一个创业团队的真实故事

(1) 痛点:直接写代码导致3次推倒重来

Bob带着团队直接开始写代码,2周后发现数据源设计不合理要重来,4周后发现模型架构不支持在线预测又要改,8周后发现部署方案没考虑监控又要重构。没有设计的项目,每一步都是"意外"。

(2) 系统设计的解法

系统设计把"做什么"和"怎么做"提前想清楚——需求→数据→模型→部署→监控,每一步都有明确方案。

PYTHON
# Project design as code
project_config = {
    "name": "SalesPredict",
    "goal": "Monthly revenue prediction MAPE < 10%",
    "data_sources": ["orders", "users", "products", "ad_logs"],
    "model_pipeline": "LinearRegression → XGBoost → MLP",
    "deployment": "FastAPI + Docker + MLflow",
    "team": {"Alice": "Data Engineering", "Bob": "ML Engineering", "Charlie": "DevOps"},
}

(3) 收益:设计先行,开发零返工

Bob用1周完成系统设计后,8周开发零返工,按时交付。设计成本只占项目总时间的10%,但避免了50%以上的返工风险。


3. 需求分析

(1) 业务目标定义

▶ 示例:需求文档模板

PYTHON
# Requirements as structured config
requirements = {
    "business_goal": "Predict next month's revenue per product category",
    "success_metrics": {
        "primary": "MAPE < 10% for monthly revenue prediction",
        "secondary": ["MAE < 50k USD per category", "Prediction latency < 100ms"],
    },
    "user_stories": [
        "As Bob (Operations), I want monthly revenue predictions so I can optimize inventory",
        "As Alice (US Manager), I want USD-denominated predictions for the US market",
        "As Charlie (EU Manager), I want EUR-denominated predictions for the EU market",
        "As CFO, I want prediction confidence intervals for budget planning",
    ],
    "constraints": {
        "data_latency": "Daily batch update by 6:00 AM",
        "prediction_sla": "API response < 100ms p95",
        "model_retraining": "Weekly automated retraining",
        "compliance": "GDPR for EU user data",
    },
    "scope": {
        "in_scope": ["3 market regions", "5 product categories", "Monthly & weekly predictions"],
        "out_of_scope": ["Real-time per-order prediction", "Image-based product classification"],
    },
}

输出:

TEXT 📖 仅展示
# 执行成功
维度 定义 SalesPredict目标
核心指标 模型性能KPI MAPE < 10%
业务指标 业务价值衡量 库存成本降低20%
SLA 服务等级协议 API < 100ms p95
数据时效 数据更新频率 日批处理
合规 法规约束 GDPR(EU数据)

4. 数据架构

(1) 数据源与数据流

100%
graph TB
    ORDERS[Orders DB<br/>Transaction Data] --> ETL[ETL Pipeline<br/>Daily Batch]
    USERS[User Profiles] --> ETL
    PRODUCTS[Product Catalog] --> ETL
    ADLOGS[Ad Platform Logs] --> ETL
    ETL --> DATALAKE[Data Lake<br/>S3 / GCS]
    DATALAKE --> FEATURE[Feature Store<br/>Engineered Features]
    FEATURE --> TRAIN[Training Pipeline]
    FEATURE --> SERVE[Serving Layer<br/>Online Features]
    SERVE --> API[Prediction API]

▶ 示例:数据源定义

PYTHON
data_sources = {
    "orders": {
        "source": "PostgreSQL (production DB)",
        "fields": ["order_id", "user_id", "product_id", "amount_usd", "order_date", "category"],
        "volume": "~500k rows/month",
        "latency": "T+1 (next day available)",
    },
    "users": {
        "source": "CRM System",
        "fields": ["user_id", "region", "segment", "register_date", "lifetime_value"],
        "volume": "~50k active users",
        "latency": "T+1",
    },
    "ad_spend": {
        "source": "Google Ads + Facebook Ads API",
        "fields": ["date", "channel", "campaign", "spend_usd", "impressions", "clicks"],
        "volume": "~10k rows/month",
        "latency": "T+2",
    },
    "product_catalog": {
        "source": "PIM System",
        "fields": ["product_id", "category", "price_usd", "margin_pct", "launch_date"],
        "volume": "~5k products",
        "latency": "Weekly update",
    },
}

输出:

TEXT 📖 仅展示
# 执行成功

(2) 特征存储设计

特征组 特征数 更新频率 存储方式
RFM特征 12 Parquet (offline) + Redis (online)
广告特征 8 Parquet
时间特征 6 实时计算 代码逻辑
类别特征 5 周维表 Parquet
聚合统计 10 Parquet

5. 模型架构

(1) 模型演进路线

▶ 示例:模型架构定义

PYTHON
model_architecture = {
    "stage_1_baseline": {
        "model": "LinearRegression + Pipeline",
        "expected_r2": "0.72-0.78",
        "expected_mape": "12-15%",
        "purpose": "Establish baseline, validate data pipeline",
        "timeline": "Week 1-2",
    },
    "stage_2_advanced": {
        "model": "XGBoost + Feature Engineering",
        "expected_r2": "0.85-0.89",
        "expected_mape": "8-10%",
        "purpose": "Production model, meet MAPE < 10% target",
        "timeline": "Week 3-5",
    },
    "stage_3_deep_learning": {
        "model": "MLP / LSTM (time series)",
        "expected_r2": "0.87-0.92",
        "expected_mape": "7-9%",
        "purpose": "Incremental improvement, capture temporal patterns",
        "timeline": "Week 6-8",
    },
}

输出:

TEXT 📖 仅展示
# 执行成功
阶段 模型 MAPE 训练时间 优先级
Stage 1 LinearRegression 12-15% <1min P0
Stage 2 XGBoost 8-10% ~5min P0
Stage 3 MLP/LSTM 7-9% ~30min P1

(2) 评估策略

PYTHON
evaluation_strategy = {
    "cv_method": "TimeSeriesSplit(n_splits=5)",
    "primary_metric": "MAPE",
    "secondary_metrics": ["MAE", "RMSE", "R2"],
    "business_alignment": {
        "MAPE_10pct": "Prediction error within 10% of actual revenue",
        "MAE_50k": "Average absolute error less than 50k USD per category",
        "cost_of_error": "1% MAPE ≈ 100k USD annual inventory waste",
    },
    "ab_testing": {
        "duration": "3 weeks",
        "metric": "Revenue prediction MAPE vs actuals",
        "sample_size": "All categories, all markets",
    },
}

6. 部署架构与团队分工

(1) 部署架构

100%
graph TB
    CLIENT[Client Apps] --> NGINX[Nginx Load Balancer]
    NGINX --> API1[FastAPI Worker 1]
    NGINX --> API2[FastAPI Worker 2]
    API1 --> MODEL[MLflow Model Registry<br/>Production Model]
    API2 --> MODEL
    API1 --> REDIS[(Redis Cache)]
    API2 --> REDIS
    MODEL --> MLFLOW[MLflow Tracking<br/>Experiment History]
    MLFLOW --> MONITOR[Monitoring Stack<br/>Prometheus + Grafana]
    MONITOR --> ALERT[Alert Manager<br/>Drift Detection]
    ALERT --> RETRAIN[Retraining Pipeline<br/>Airflow/Dagster]
    RETRAIN --> MLFLOW

(2) 团队分工

▶ 示例:风险登记表

PYTHON
risk_register = {
    "data_quality": {
        "risk": "Raw data has >5% missing values in key features",
        "probability": "High",
        "impact": "Critical - model trained on biased data",
        "mitigation": "Automated data quality checks in ETL pipeline",
        "owner": "Alice",
    },
    "model_overfitting": {
        "risk": "XGBoost overfits on small category samples",
        "probability": "Medium",
        "impact": "High - poor generalization to new markets",
        "mitigation": "TimeSeriesSplit CV, regularization, early stopping",
        "owner": "Bob",
    },
    "api_latency": {
        "risk": "Prediction API exceeds 100ms SLA under load",
        "probability": "Medium",
        "impact": "Medium - user experience degradation",
        "mitigation": "Redis cache for hot queries, Nginx rate limiting",
        "owner": "Charlie",
    },
}

输出:

TEXT 📖 仅展示
# 执行成功

▶ 示例:项目排期

PYTHON
project_schedule = {
    "Week 1-2: Data & Baseline": {
        "Alice": "ETL pipeline, data lake setup, data quality checks",
        "Bob": "EDA, feature engineering, LinearRegression baseline",
        "Charlie": "Dev environment, MLflow setup, CI/CD pipeline",
    },
    "Week 3-5: Advanced Model": {
        "Alice": "Feature store, online serving layer, data monitoring",
        "Bob": "XGBoost training, hyperparameter tuning, model evaluation",
        "Charlie": "FastAPI scaffold, Docker setup, load testing",
    },
    "Week 6-8: Deep Learning & Deploy": {
        "Alice": "Real-time features, data drift detection",
        "Bob": "MLP/LSTM experiments, A/B test design",
        "Charlie": "Production deployment, monitoring dashboard, alerting",
    },
    "Week 9-10: Launch & Monitor": {
        "Alice": "Data pipeline monitoring, feature validation",
        "Bob": "Model monitoring, retraining pipeline",
        "Charlie": "A/B test execution, gradual rollout, on-call setup",
    },
}

输出:

TEXT 📖 仅展示
# 执行成功
角色 负责人 职责 交付物
数据工程 Alice ETL/数据湖/特征存储 数据管道+特征
ML工程 Bob 特征工程/模型训练/评估 最佳模型+实验记录
后端/DevOps Charlie API/部署/监控 生产服务+监控

❓ 常见问题

Q 需求分析应该多详细?
A 至少包含——1)明确的业务目标和量化KPI;2)用户故事(谁用什么做什么);3)约束条件(延迟/合规/预算);4)范围边界(做什么不做什么)。不够详细的需求是返工的主因。
Q 基线模型有必要吗?
A 必须。基线建立性能下限和数据管道验证。没有基线你无法判断XGBoost的改善是模型功劳还是数据管道修好了。
Q 团队应该有多少人?
A ML项目最少3人——1数据+1ML+1DevOps。1人全栈也行但效率低且知识单点。核心是三个角色都有人覆盖,不是人数。
Q 先做数据还是先做模型?
A 数据优先。脏数据+好模型=垃圾结果。先用1-2周建立可靠数据管道,再训练模型。数据问题越早发现修复成本越低。
Q 设计阶段应该花多长时间?
A 项目总时长的10-15%。8周项目花1周设计是合理的。设计不足导致返工的成本远超多花1周设计。
Q 如何确保设计落地?
A 设计文档包含——1)明确的交付物和验收标准;2)代码模板/脚手架;3)测试策略;4)里程碑检查点。每个里程碑验证设计是否正确执行。

📖 小节


📝 作业

  1. 基础题(难度⭐):为自己的ML项目写一份需求文档,包含业务目标、成功指标和范围边界。提示:参考第3节需求文档模板。
  2. 进阶题(难度⭐⭐):绘制SalesPredict的完整数据架构图(Mermaid),标注每个数据源、ETL步骤和存储方式。提示:参考第4节数据架构图。
  3. 挑战题(难度⭐⭐⭐):完整设计一个ML项目——需求→数据→模型→部署→监控→团队,输出一份可执行的项目计划(含时间线和交付物)。提示:综合第3-6节所有设计要素。

← 上一课:生产监控与模型漂移 | 下一课:项目开发 →

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏