返回作品

短视频用户行为数据分析与健康度评估

创建于 2026 年 2 月 27 日

标签
  • Python
  • Pandas
  • scikit-learn
  • Streamlit
  • FastAPI
  • SQLAlchemy

项目介绍

短视频平台的用户行为数据蕴含丰富的使用习惯信息,但原始记录通常存在列名不统一、缺失值、异常时长、时间格式杂乱等问题,难以直接用于健康评估。本项目围绕「观看行为 → 健康画像」这一主线,把原始行为数据组织为可分析的标准化数据集,并给出每位用户每日的健康度结论。

项目是一个完整的端到端分析管线:从示例数据生成、数据清洗、特征工程,到规则分级、健康评分、模型训练评估,再到 Streamlit 与 FastAPI 双页面可视化,每个环节都有独立脚本与清晰输出,既能跑通演示流程,也能替换真实数据直接使用。项目内置的示例数据包含约 8000 条行为记录,字段覆盖观看时长、观看时间戳、互动类型、内容标签、设备、性别、年龄与地区。

项目架构

项目按「脚本编排层 — 核心处理层 — 展示层」三层组织。scripts/ 目录下的 step0step4 分步执行:生成示例数据、数据清洗、特征工程、模型训练、可视化出图;core/ 目录承载核心模块,包括字段标准化与清洗(data_cleaner.py)、特征构建(feature_engineering.py)、健康度规则与评分(health_rules.py)、模型训练(modeling.py)、图表输出(visualization.py)与数据库持久化(db.py);展示层包含 app/streamlit_app.pyfastapi_app/(页面模板、静态资源与 REST API)。

数据流为 data/raw/tiktok_user_behavior.csvcleaned_behavior.csv(清洗数据)→ feature_user_day.csv(用户-日粒度特征)→ 模型文件与评估指标、分析图表。持久化采用三层策略:CSV 文件始终写入,SQLite(data/processed/local.db)始终写入 cleaned_behaviorfeature_user_dayhealth_assessment 等表,MySQL 由 config.pyMYSQL_CONFIG['enabled'] 开关控制(pymysql 驱动)。所有路径、阈值、评分权重与字段候选映射集中配置在 config.py,替换真实数据时只需调整该文件。

核心功能

  • 字段标准化与数据清洗:通过 COLUMN_CANDIDATES 维护标准字段与中英文候选列名映射(如 观看时长/play_durationwatch_seconds),自动识别并标准化列名;完成时长与时间戳类型转换、非法值过滤、按「用户+时间」去重、缺失值填充(性别取众数、年龄取中位数),并拆出日期、小时、星期、时段(上午/下午/晚上/深夜)与夜间、周末标记。

  • 用户日粒度特征工程:以「用户 × 日期」为粒度聚合出 22 个特征,包括日总观看时长、平均观看时长、观看次数、互动次数与互动率、夜间/周末观看时长与占比、内容标签种类数、内容香农熵与头部标签占比(内容集中度),以及基于 30 分钟间隔切分会话后的最长连续观看时长,为后续评估提供完整的行为画像。

  • 健康度规则评估与评分:双通道评估体系。规则分级基于「分位数自适应 + 业务上下限」的混合阈值,判定偏保守——风险档要求重度总时长、深夜使用、长会话、内容单一、高集中度五类信号中至少 3 项且包含核心风险;健康分则按观看时长(35%)、夜间占比(25%)、内容集中度(20%)、最长会话(20%)加权扣分,映射到健康(80-100)、亚健康(60-79)、风险(0-59)三档。

  • 多模型训练与评估:使用 scikit-learn 训练逻辑回归(StandardScaler 管道、class_weight='balanced')、决策树与随机森林(200 棵树、最大深度 8)三个分类器,按 macro-F1 选取最佳模型并以 joblib 导出,评估指标(accuracy、macro_f1、混淆矩阵)写入 model_metrics.json。在示例数据上决策树与随机森林达到 1.0 的准确率与 macro-F1,逻辑回归准确率约 0.98、macro-F1 约 0.92,印证了规则标签与模型预测的一致性。

  • 双页面可视化与推理接口:Streamlit 提供指标卡、用户筛选、规则等级/评分等级/健康分/模型预测四联指标、关键风险指标与历史记录表格;FastAPI 提供可视化看板(健康分布饼图、评分趋势、地区对比、等级雷达图)、用户列表分页/搜索/筛选、用户详情(含模型预测与近 30 天历史)、/api/predict 在线推理接口与 /api/model/metrics 指标接口,并附带管理后台:上传 CSV 原始数据、一键启动清洗/特征/评估/全流程任务、实时查看任务日志与系统状态。

功能截图

暂无运行截图。

快速上手

使用 Anaconda 创建 Python 3.13 环境并安装依赖后,先运行 python scripts/step0_make_sample_data.py 生成示例数据,再依次执行 step1_data_clean.pystep2_feature_engineering.pystep3_model_training.pystep4_visualization.py 完成清洗、特征、建模与出图。每个脚本都有明确的输入输出:清洗结果写入 cleaned_behavior.csv,特征与评估结果写入 feature_user_day.csv,最佳模型保存到 models/,图表输出到 images/

展示层支持两种启动方式:streamlit run app/streamlit_app.py(默认 8501 端口)或 uvicorn fastapi_app.main:app --reload --port 8000(含 /docs 接口文档);也可使用 python scripts/start_services.py --mode all 一键检查依赖并同时启动两个服务。接入真实数据时,将数据放入 data/raw/tiktok_user_behavior.csv,若列名不一致在 config.pyCOLUMN_CANDIDATES 中补充映射即可。

总结

项目完整覆盖了短视频用户行为分析从原始数据到健康评估的各个环节:字段自适应标准化解决了真实数据列名杂乱的问题,用户日粒度特征工程把行为记录转化为可解释的健康画像,规则与评分双通道既保证了判定可解释,也提供了连续的健康分数,多模型训练与最佳模型导出则让评估具备预测能力。

在工程层面,三层持久化、集中式配置、Streamlit 与 FastAPI 双端展示、以及带任务编排的管理后台,使项目兼具演示价值与实际可用性。若将规则阈值与评分权重按业务口径微调,并接入更大规模的真实行为数据,即可直接落地为短视频平台用户使用健康度的监测与预警工具。