Python全栈实战:基于机器学习的用户行为分析系统

1. 项目背景与目标

很多初创公司拥有用户数据,但缺乏挖掘价值的能力。本项目的目标是构建一个 MVP(最小可行性产品),实现以下功能:

  1. 数据接入:模拟生成电商/应用的用户行为日志(点击量、停留时长、消费金额等)。

  2. 机器学习分析:使用 K-Means 算法对用户进行自动画像分层(如:高价值用户、流失风险用户)。

  3. 全栈展示:通过 Web 界面可视化展示聚类结果。

2. 技术栈选型

  • 语言:Python 3.9+

  • Web框架:Flask (轻量级,适合快速开发)

  • 机器学习:Scikit-learn (K-Means聚类), Pandas (数据处理)

  • 前端可视化:HTML + ECharts (强大的图表库)

3. 系统架构设计

graph LR
A[数据生成器] -->|生成CSV| B(本地数据仓库)
B --> C{ML 模型引擎}
C -->|训练/预测| D[K-Means 算法]
D -->|聚类结果| E[Flask API]
E -->|JSON响应| F[前端 ECharts 仪表盘]

4. 核心功能与代码实现

4.1 数据生成与特征工程

我们主要关注三个指标(RFM模型的简化版):active_time (活跃时长), clicks (点击次数), amount (消费金额)。为了让模型有规律可循,我们使用 Numpy 的正态分布生成三类典型人群。

核心代码 (data_generator.py):

def generate_mock_data(num_users=500):
    # 1. 高价值用户:时间长、点击多、消费高
    group1 = {
        'active_time': np.random.normal(60, 15, 150),
        'clicks': np.random.normal(50, 10, 150),
        'amount': np.random.normal(200, 50, 150)
    }
    
    # 2. 潜在流失用户:各项指标均低
    group3 = {
        'active_time': np.random.normal(5, 2, 150),
        'clicks': np.random.normal(5, 2, 150),
        'amount': np.random.normal(0, 5, 150)
    }
    
    # ... 合并数据并保存为 CSV

4.2 机器学习引擎 (K-Means)

我们使用 Scikit-learn 的 KMeans 算法将用户聚类为 3 类。为了让结果具备业务价值,我们在聚类后根据“平均消费金额”对 Cluster ID 进行排序,从而自动打上“高价值”、“普通”或“流失风险”的标签。

核心代码 (ml_engine.py):

class UserClusterModel:
    def train_and_predict(self):
        # ... 数据读取 ...
        
        # 1. 数据标准化 (K-Means 对尺度敏感,必须缩放)
        scaled_features = self.scaler.fit_transform(features)
        
        # 2. 训练模型 (k=3)
        self.model = KMeans(n_clusters=3, random_state=42)
        df['cluster'] = self.model.fit_predict(scaled_features)
        
        # 3. 智能标签映射 (按消费金额排序)
        # 算出每个簇的平均消费,从高到低排序
        cluster_stats = df.groupby('cluster')['amount'].mean().sort_values(ascending=False)
        sorted_ids = cluster_stats.index.tolist()
        
        labels_map = {
            sorted_ids[0]: '高价值用户 (High Value)',
            sorted_ids[1]: '普通用户 (Normal)',
            sorted_ids[2]: '流失风险 (Churn Risk)'
        }
        df['label'] = df['cluster'].map(labels_map)
        return df

4.3 Flask 后端接口

后端主要负责调度 ML 引擎,并将处理好的数据格式化为 ECharts 散点图所需的 JSON 结构。

核心代码 (app.py):

@app.route('/api/analyze')
def api_analyze():
    # 调用引擎进行训练和预测
    df = model_engine.train_and_predict()
    
    # 构造 ECharts 散点图数据结构
    scatter_data = []
    for label in df['label'].unique():
        subset = df[df['label'] == label]
        scatter_data.append({
            "name": label,
            "data": subset[['active_time', 'amount', 'clicks', 'user_id']].values.tolist()
        })
        
    return jsonify({
        "scatter_data": scatter_data,
        "summary": model_engine.get_statistics(df)
    })

5. 快速启动指南

环境准备

确保已安装 Python 3.8 或以上版本。

安装依赖

pip install -r requirements.txt

运行项目

  1. 启动 Flask 服务器:

    python app.py
    

    注意:首次运行时,系统会自动调用生成器创建 500 条模拟数据。

  2. 打开浏览器访问: http://127.0.0.1:5000

  3. 在网页中,你可以查看自动分层的散点图,点击右上角的“重新生成数据”按钮可以模拟新的数据流入并实时重新训练模型。

6. 总结

通过不到 300 行代码,我们实现了一个打通数据生产、模型训练、后端接口和前端展示的闭环系统。这不仅是一个 Demo,更是迈向 AIOps 和数据中台的第一步。

项目代码:

下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天天进步2015

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

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

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

打赏作者

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

抵扣说明:

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

余额充值