课程进度 67% · 第8/11章第8/11章 · 标签 1/3
— 1 —
电商用户流失预测
电商平台需要预测哪些用户可能会流失,以便及时采取挽留措施。本项目使用机器学习方法,基于用户的历史行为数据,预测用户在未来30天内是否会流失。
数据准备
python
1
# 用户行为数据示例
2
用户ID 注册时间 最近登录 购买次数 消费金额 浏览时长 收藏数 购物车数 流失标记
3
001 2023-01-01 2024-01-15 5 1000 120 3 2 0
4
002 2023-02-01 2024-01-20 8 2000 180 5 3 0
5
003 2023-03-01 2024-01-25 2 500 60 1 1 1
6
...
特征工程
python
1
import pandas as pd
2
import numpy as np
3
from datetime import datetime
4
5
# 1. 加载数据
6
df = pd.read_csv('user_behavior.csv')
7
8
# 2. 时间特征处理
9
df['注册时间'] = pd.to_datetime(df['注册时间'])
10
df['最近登录'] = pd.to_datetime(df['最近登录'])
11
12
# 计算用户注册时长(天)
13
df['注册时长'] = (datetime.now() - df['注册时间']).dt.days
14
15
# 计算最近登录距离现在的时间(天)
16
df['最近登录间隔'] = (datetime.now() - df['最近登录']).dt.days
17
18
# 3. 用户行为特征
19
# 计算用户活跃度
20
df['活跃度'] = df['浏览时长'] / df['最近登录间隔']
21
22
# 计算购买频率
23
df['购买频率'] = df['购买次数'] / df['注册时长']
24
25
# 计算平均消费金额
26
df['平均消费'] = df['消费金额'] / df['购买次数']
27
28
# 4. 特征选择
29
features = [
30
'注册时长', '最近登录间隔', '购买次数', '消费金额',
31
'浏览时长', '收藏数', '购物车数', '活跃度',
32
'购买频率', '平均消费'
33
]
34
35
X = df[features]
36
y = df['流失标记']
— 2 —
模型训练与评估
python
1
from sklearn.model_selection import train_test_split
2
from sklearn.preprocessing import StandardScaler
3
from sklearn.ensemble import RandomForestClassifier
4
from sklearn.metrics import classification_report, roc_auc_score
5
import xgboost as xgb
6
7
# 1. 数据预处理
8
X_train, X_test, y_train, y_test = train_test_split(
9
X, y, test_size=0.2, random_state=42
10
)
11
12
# 标准化特征
13
scaler = StandardScaler()
14
X_train_scaled = scaler.fit_transform(X_train)
15
X_test_scaled = scaler.transform(X_test)
16
17
# 2. 训练模型
18
# 随机森林
19
rf_model = RandomForestClassifier(
20
n_estimators=100,
21
max_depth=5,
22
random_state=42
23
)
24
rf_model.fit(X_train_scaled, y_train)
25
26
# XGBoost
27
xgb_model = xgb.XGBClassifier(
28
n_estimators=100,
29
max_depth=5,
30
learning_rate=0.1,
31
random_state=42
32
)
33
xgb_model.fit(X_train_scaled, y_train)
34
35
# 3. 模型评估
36
models = {
37
'随机森林': rf_model,
38
'XGBoost': xgb_model
39
}
40
41
for name, model in models.items():
42
pred = model.predict(X_test_scaled)
43
proba = model.predict_proba(X_test_scaled)[:, 1]
44
45
print(f"\n{name}模型评估:")
46
print(classification_report(y_test, pred))
47
print(f"AUC分数: {roc_auc_score(y_test, proba):.3f}")
48
49
# 4. 特征重要性分析
50
rf_importance = pd.DataFrame({
51
'特征': features,
52
'重要性': rf_model.feature_importances_
53
}).sort_values('重要性', ascending=False)
54
55
print("\n特征重要性:")
56
print(rf_importance)
模型部署与应用
python
1
import joblib
2
import pandas as pd
3
from datetime import datetime
4
5
# 1. 保存模型
6
joblib.dump(rf_model, 'churn_prediction_model.pkl')
7
joblib.dump(scaler, 'feature_scaler.pkl')
8
9
# 2. 预测函数
10
def predict_churn(user_data):
11
# 加载模型和标准化器
12
model = joblib.load('churn_prediction_model.pkl')
13
scaler = joblib.load('feature_scaler.pkl')
14
15
# 特征工程
16
user_data['注册时长'] = (datetime.now() - pd.to_datetime(user_data['注册时间'])).dt.days
17
user_data['最近登录间隔'] = (datetime.now() - pd.to_datetime(user_data['最近登录'])).dt.days
18
user_data['活跃度'] = user_data['浏览时长'] / user_data['最近登录间隔']
19
user_data['购买频率'] = user_data['购买次数'] / user_data['注册时长']
20
user_data['平均消费'] = user_data['消费金额'] / user_data['购买次数']
21
22
# 选择特征
23
features = [
24
'注册时长', '最近登录间隔', '购买次数', '消费金额',
25
'浏览时长', '收藏数', '购物车数', '活跃度',
26
'购买频率', '平均消费'
27
]
28
29
# 标准化特征
30
X = scaler.transform(user_data[features])
31
32
# 预测
33
churn_prob = model.predict_proba(X)[:, 1]
34
35
return churn_prob
36
37
# 3. 使用示例
38
new_user = pd.DataFrame({
39
'注册时间': ['2023-06-01'],
40
'最近登录': ['2024-01-20'],
41
'购买次数': [3],
42
'消费金额': [800],
43
'浏览时长': [90],
44
'收藏数': [2],
45
'购物车数': [1]
46
})
47
48
churn_probability = predict_churn(new_user)
49
print(f"用户流失概率: {churn_probability[0]:.2%}")
RandomForestXGBoostAUC特征工程部署