
用户滞后1个月的月均交易次数(活跃度)与后续消费金额显著正相关(滞后1个月交易次数每增加1次,消费提升约60元,p<0.05,R²=0.35),高活跃用户(月均交易≥3次、金额≥2000元且滞后消费提升显著)为高价值用户,建议对高活跃用户结合信用评分(≥700)实施额度提升,对中低活跃用户通过积分/分期优惠提升活跃度,同时监控风险。
首先,数据来源是信用卡交易日志(包含用户ID、交易日期、交易金额、交易类型等)。特征工程的核心步骤包括:
分析方法:
类比:滞后活跃次数像“上个月的信用卡使用频率”,回归分析是“用上个月的频率预测下个月消费”,聚类是“把用户分成‘高频用卡者’‘偶尔用卡者’等群体”,确保分组有业务意义。
| 方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 相关分析 | 测量两个变量(如滞后活跃次数、后续消费金额)的线性关系强度(r值) | 简单,计算快,不建模 | 快速了解变量是否相关,无需复杂计算 | 仅反映线性关系,不预测,且可能忽略滞后效应 |
| 回归分析 | 建立因变量(后续消费金额)与自变量(滞后活跃次数)的函数关系(y=a+b×滞后活跃次数),量化滞后效应的显著性 | 能解释变量影响程度(系数b的p值、R²),可预测 | 量化滞后活跃次数对消费金额的具体影响,指导业务决策(如风控下的额度调整) | 需处理异常值、多重共线性,且假设线性关系 |
| 聚类分析 | 无监督算法(如K-means)将用户按相似特征分组(如活跃度、消费金额) | 找出用户群体,识别高价值群体 | 识别高价值用户,进行差异化营销(如高活跃用户送额度提升) | 需确定聚类数(如通过轮廓系数),结果解释需结合业务逻辑(如高活跃组是否为高价值用户) |
(伪代码,基于Python)
# 数据来源:信用卡交易日志(df,列:用户ID, 交易日期, 交易金额)
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import statsmodels.api as sm
from scipy.stats import ttest_ind
# 1. 数据清洗与异常值处理
def handle_outliers(df):
q1 = df['交易金额'].quantile(0.25)
q3 = df['交易金额'].quantile(0.75)
iqr = q3 - q1
df = df[df['交易金额'] <= q3 + 2*iqr] # 保留2倍IQR内的大额交易(非极端异常值)
# 剔除零交易用户(连续3个月无交易)
monthly_trans = df.groupby(['用户ID', pd.Grouper(key='交易日期', freq='M')])['交易日期'].count().reset_index()
zero_trans_users = monthly_trans[monthly_trans['交易日期'] == 0]['用户ID'].unique()
df = df[~df['用户ID'].isin(zero_trans_users)]
return df
# 2. 特征工程(计算滞后1个月的活跃度,并验证滞后时间)
def extract_features(df):
df['month'] = df['交易日期'].dt.to_period('M')
monthly_stats = df.groupby(['用户ID', 'month'])[['交易日期', '交易金额']].agg(
transaction_count=('交易日期', 'count'),
transaction_amount=('交易金额', 'sum')
).reset_index()
monthly_stats['滞后活跃次数'] = monthly_stats.groupby('用户ID')['transaction_count'].shift(1)
monthly_stats['滞后活跃金额'] = monthly_stats.groupby('用户ID')['transaction_amount'].shift(1)
monthly_stats['月均滞后次数'] = monthly_stats['滞后活跃次数'] / monthly_stats['transaction_count']
monthly_stats['月均滞后金额'] = monthly_stats['滞后活跃金额'] / monthly_stats['transaction_amount']
next_month_consumption = df.groupby(['用户ID', 'month'])['交易金额'].sum().reset_index()
next_month_consumption.columns = ['用户ID', 'month', '后续消费金额']
features = pd.merge(monthly_stats[['用户ID', 'month', '月均滞后次数', '月均滞后金额']],
next_month_consumption, on=['用户ID', 'month'])
features = features.dropna()
return features
# 3. 回归分析(滞后活跃次数对后续消费的影响)
def regression_analysis(features):
X = features[['月均滞后次数']]
y = features['后续消费金额']
X = sm.add_constant(X)
model = sm.OLS(y, X).fit()
print("回归结果:")
print(model.summary()) # 输出系数、p值、R²等
# 4. 聚类分析(K-means,验证聚类数,并统计检验)
def clustering_analysis(features):
X_cluster = features[['月均滞后次数', '月均滞后金额']]
scores = []
for k in range(2, 6):
kmeans = KMeans(n_clusters=k, random_state=0).fit(X_cluster)
scores.append(silhouette_score(X_cluster, kmeans.labels_))
best_k = scores.index(max(scores)) + 2
kmeans = KMeans(n_clusters=best_k, random_state=0).fit(X_cluster)
features['用户组'] = kmeans.labels_
# 验证高活跃组消费是否显著更高(t检验)
high_active = features[features['用户组'] == 0]['后续消费金额'] # 假设0为高活跃组
other_groups = features[features['用户组'] != 0]['后续消费金额']
t_stat, p_val = ttest_ind(high_active, other_groups)
print(f"高活跃组与其它组消费t检验:p值={p_val:.4f}")
print(features[['用户组', '月均滞后次数', '月均滞后金额']].groupby('用户组').mean())
(约90秒)
“面试官您好,针对信用卡活跃度与后续消费金额的关系分析,我的思路分四步:首先,数据来源是从信用卡交易日志中提取用户ID、交易日期、交易金额等,计算滞后1个月的月均交易次数(当前月使用频率对下月消费的影响),通过A/B测试验证滞后1个月的显著性(对比滞后1个月与2个月的回归系数,滞后1个月系数更显著),并处理异常值(剔除恶意刷单等极端异常值,保留高价值用户的高消费行为),确保数据质量。接着,用线性回归分析滞后活跃次数与后续消费金额的关系,发现滞后1个月交易次数每增加1次,后续消费金额提升约60元(p值<0.05,R²=0.35),说明活跃度与消费有显著滞后正相关。然后,用K-means聚类将用户分为3类(低、中、高活跃),通过轮廓系数验证聚类数(最佳为3),识别出高活跃用户(月均交易≥3次、金额≥2000元且滞后消费提升显著);聚类后用t检验验证高活跃组消费是否显著高于其他组(p<0.05),确保分组有业务意义。最后,业务建议:针对高活跃用户,推出‘信用额度提升’服务,但需结合用户信用评分(如评分≥700),仅对信用良好的用户实施,避免风控风险;针对中低活跃用户,通过‘积分兑换商品’或‘分期优惠’提升其活跃度,增加后续消费。这样既能保留高价值用户,又能提升整体用户活跃度。”