当前位置:首页>python>从指标生成标签的SQL/Python代码示例

从指标生成标签的SQL/Python代码示例

  • 2026-10-11 07:34:09
从指标生成标签的SQL/Python代码示例

从指标生成标签的SQL/Python代码示例

以下是 从指标生成标签的 SQL 与 Python 实用代码示例,覆盖金融、电商、互联网等典型场景,包含 规则法(Rule-based) 和 模型法(Model-based) 两种主流方式。


一、SQL 示例(适用于数仓/BI系统)

场景1:电商用户价值分层(RFM 模型简化版)

指标:最近购买距今天数(Recency)、30天购买次数(Frequency)标签:user_value_level(高价值 / 中价值 / 低价值 / 流失)

-- 假设有一张用户行为汇总表 user_behavior_aggSELECT    user_id,    recency_days,    purchase_freq_30d,    CASE        WHEN recency_days <= 7 AND purchase_freq_30d >= 3 THEN '高价值'        WHEN recency_days <= 30 AND purchase_freq_30d >= 1 THEN '中价值'        WHEN recency_days <= 90 THEN '低价值'        ELSE '流失'    END AS user_value_levelFROM user_behavior_agg;

场景2:金融客户风险标签

指标:近6个月逾期次数、负债收入比(DTI)标签:risk_level(低 / 中 / 高)

SELECT    cust_id,    overdue_count_6m,    dti_ratio,    CASE        WHEN overdue_count_6m = 0 AND dti_ratio < 0.4 THEN '低风险'        WHEN overdue_count_6m <= 2 AND dti_ratio < 0.7 THEN '中风险'        ELSE '高风险'    END AS risk_levelFROM customer_risk_metrics;

场景3:动态活跃度标签(按周更新)

-- 每周一凌晨跑批,生成本周用户活跃标签INSERT INTO user_active_tag (user_id, active_tag, update_date)SELECT    user_id,    CASE        WHEN login_days_7d >= 5 THEN '重度活跃'        WHEN login_days_7d >= 2 THEN '中度活跃'        ELSE '低活跃'    END AS active_tag,    CURRENT_DATE() AS update_dateFROM (    SELECT        user_id,        COUNT(DISTINCT login_date) AS login_days_7d    FROM user_login_log    WHERE login_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)    GROUP BY user_id) t;

二、Python 示例(适用于建模/自动化标签系统)

环境依赖

import pandas as pdimport numpy as npfrom sklearn.cluster import KMeans

示例1:规则法生成标签(类似SQL逻辑)

# 假设 df 是包含用户指标的DataFramedf = pd.read_csv("user_metrics.csv")  # 含字段: user_id, recency, frequency, monetarydef assign_value_tag(row):    if row['recency'] <= 7 and row['frequency'] >= 3:        return '高价值'    elif row['recency'] <= 30 and row['frequency'] >= 1:        return '中价值'    elif row['recency'] <= 90:        return '低价值'    else:        return '流失'df['user_value_tag'] = df.apply(assign_value_tag, axis=1)# 保存标签结果df[['user_id', 'user_value_tag']].to_csv("user_tags.csv", index=False)

示例2:聚类法生成用户分群标签(无监督)

# 标准化指标(KMeans对量纲敏感)from sklearn.preprocessing import StandardScalermetrics = df[['recency', 'frequency', 'monetary']]scaler = StandardScaler()metrics_scaled = scaler.fit_transform(metrics)# K-Means 聚类(假设分4类)kmeans = KMeans(n_clusters=4, random_state=42)df['cluster_id'] = kmeans.fit_predict(metrics_scaled)# 为聚类结果赋予业务含义cluster_summary = df.groupby('cluster_id')[['recency', 'frequency', 'monetary']].mean()print(cluster_summary)# 手动映射标签(根据均值解释)cluster_label_map = {0: '高价值', 1: '价格敏感', 2: '新客', 3: '流失风险'}df['behavior_tag'] = df['cluster_id'].map(cluster_label_map)df[['user_id', 'behavior_tag']].to_csv("behavior_tags.csv", index=False)

示例3:用分类模型预测“流失标签”(监督学习)

from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_split# 假设已有历史数据:features + 是否流失(is_churn)data = pd.read_csv("churn_data.csv")X = data[['login_days_7d', 'avg_session_time', 'support_tickets']]y = data['is_churn']  # 0=未流失, 1=流失# 训练模型X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)model = RandomForestClassifier()model.fit(X_train, y_train)# 对新用户打流失风险标签new_users = pd.read_csv("new_user_metrics.csv")new_users['churn_prob'] = model.predict_proba(new_users[X.columns])[:, 1]new_users['churn_risk_tag'] = np.where(new_users['churn_prob'] > 0.7, '高流失风险', '正常')new_users[['user_id', 'churn_risk_tag']].to_csv("churn_risk_tags.csv", index=False)

三、关键工程实践建议

问题
解决方案
标签版本管理
在标签表中增加 tag_version, effective_date 字段
性能优化
SQL 中避免全表扫描;Python 中用 vectorized operations 替代 apply
可解释性
规则标签需记录逻辑;模型标签需提供 SHAP/LIME 解释
调度更新
通过 Airflow / DolphinScheduler 每日/每周自动运行标签生成任务
监控漂移
监控标签分布变化(如 PSI),防止业务突变导致标签失效

四、输出表示例(标签表结构)

user_id
tag_name
tag_value
update_time
source_type
U1001
user_value_level
高价值
2026-03-18
rule_based
U1002
churn_risk
高流失风险
2026-03-18
model_v2
U1003
active_level
重度活跃
2026-03-18
rule_based

✅ 最佳实践:标签应作为独立数据资产管理,而非临时计算字段。


💡 总结:

  • • 简单场景 → 用 SQL 规则(快、透明、易维护)
  • • 复杂模式 → 用 Python 模型(精准、可扩展)
  • • 无论哪种,都要确保:可追溯、可更新、可行动

免责声明:

本公众号所发布的内容仅为个人学习、研究与交流之用,不构成任何形式的学术、投资、医疗或其他专业建议。文中所涉及的观点、方法和资料均基于公开信息与个人理解,可能存在不完整或偏差之处。读者在参考时请自行甄别和验证,由此产生的任何后果,作者不承担责任(部分内容由AI生成,请注意甄别)。

版权声明:

除特别注明外,本公众号原创内容版权均归作者所有。未经授权,任何机构或个人不得以任何形式转载、引用或用于商业用途。若需转载或引用,请联系作者并注明出处。部分内容如引用自公开资料或网络资源,版权归原作者所有,如有侵权请联系删除。

最新文章

随机文章