1. 项目目的
公司最近要在某音上投放广告,进行新用户获取,或者通过app push推送一些优惠券,来提高用户的留存。无论是广告还是优惠券,都成为营销的干预手段,其背后都是有成本的。营销的目标就是在成本有限的情况下最大化营销的总产出,这里面最关键的一点是我们能否准确找到真正能被营销打动的用户,我们称他们为营销敏感人群,可以通过项目来尝试解决这个问题
通过机器学习,对用户进行精准划分和智能推荐,从而提高营销转化效果。目标可以细分成下面几个小的目标:
-
识别不同用户群体。
-
针对不同群体设计个性化营销策略。
-
通过智能推荐系统提升用户参与度和转化率。
以下是项目的大概流程:
-
数据采集:从用户行为日志、交易数据等来源收集数据。
-
数据预处理:清洗数据、特征工程。
-
模型训练:使用机器学习模型对用户进行分类。
-
推荐服务:根据用户类别生成个性化推荐。
-
结果展示:通过 API 或 Dashboard 展示推荐结果。
2. 用户分析
识别区分用户群体,我们可以基于营销人群四象限理论,用户可以分为以下四类:

2.1 Persuadables(营销敏感型)
-
特点:对营销活动敏感,容易被优惠、促销等活动吸引。
-
行为特征:频繁点击广告、参与促销活动、对价格敏感。
-
营销策略:推送个性化优惠券、限时折扣等,营销的重点对象。
2.2 Sleeping Dogs(勿扰型)
-
特点:对营销活动不感兴趣,甚至反感。
-
行为特征:很少点击广告,对促销活动无反应。
-
营销策略:减少营销推送,避免打扰,不用发优惠券。
2.3 Sure Things(确认型)
-
特点:忠诚度高,无论是否有营销活动都会购买。
-
行为特征:高频购买,对品牌忠诚。
-
营销策略:提供会员专属福利,增强用户粘性,优惠券就可以不用浪费了。
2.4 Lost Causes(沉睡型)
-
特点:曾经活跃,但现在已经流失。
-
行为特征:长时间未登录或购买。
-
营销策略:尝试召回,如发送唤醒邮件或推送。
3. 技术程序开发
我们将开发一个基于机器学习的程序,主要包括以下2个功能:
-
用户划分:使用聚类算法将用户划分为四类。
-
智能推荐:根据用户类别推送个性化营销内容。
3.1 数据准备
使用虚拟数据模拟用户行为,包括以下字段:
-
user_id
:用户 ID。 -
clicks
:广告点击次数。 -
purchases
:购买次数。 -
last_active_days
:最近一次活跃距离现在的天数。 -
discount_sensitivity
:对折扣的敏感度(0-1)。
import pandas as pd
import numpy as np
# 生成虚拟数据
np.random.seed(42)
n_users = 1000
data = {
"user_id": range(1, n_users + 1),
"clicks": np.random.randint(0, 50, n_users),
"purchases": np.random.randint(0, 20, n_users),
"last_active_days": np.random.randint(0, 365, n_users),
"discount_sensitivity": np.random.rand(n_users)
}
df = pd.DataFrame(data)
print(df.head())
3.2 用户划分
使用 K-Means 聚类算法将用户划分为四类。
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 特征选择
X = df[["clicks", "purchases", "last_active_days", "discount_sensitivity"]]
# 标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# K-Means 聚类
kmeans = KMeans(n_clusters=4, random_state=42)
df["cluster"] = kmeans.fit_predict(X_scaled)
# 查看聚类结果
print(df["cluster"].value_counts())
3.3 用户类别映射
将聚类结果映射到四象限:
-
0
:Persuadables -
1
:Sleeping Dogs -
2
:Sure Things -
3
:Lost Causes
# 映射聚类结果到四象限
cluster_mapping = {
0: "Persuadables",
1: "Sleeping Dogs",
2: "Sure Things",
3: "Lost Causes"
}
df["user_type"] = df["cluster"].map(cluster_mapping)
# 用户行为数据分布
plt.figure(figsize=(12, 6))
sns.histplot(df["clicks"], bins=30, kde=True, color="blue")
plt.title("Distribution of Clicks")
plt.xlabel("Clicks")
plt.ylabel("Frequency")
plt.show()
# 用户类别分布
plt.figure(figsize=(8, 6))
sns.countplot(x="user_type", data=df, palette="Set2")
plt.title("Distribution of User Types")
plt.xlabel("User Type")
plt.ylabel("Count")
plt.show()
3.4 智能推荐
根据用户类别设计个性化推荐策略,具体的策略可以根据需求实际情况来定义。
def recommend_strategy(user_type):
if user_type == "Persuadables":
return "推送个性化优惠券和限时折扣"
elif user_type == "Sleeping Dogs":
return "减少营销推送,避免打扰"
elif user_type == "Sure Things":
return "提供会员专属福利"
elif user_type == "Lost Causes":
return "发送唤醒邮件或推送"
else:
return "无推荐策略"
# 为每个用户生成推荐策略
df["recommendation"] = df["user_type"].apply(recommend_strategy)
# 查看推荐结果
print(df[["user_id", "user_type", "recommendation"]].head(10))
user_id user_type recommendation
0 1 Persuadables 推送个性化优惠券和限时折扣
1 2 Sure Things 提供会员专属福利
2 3 Persuadables 推送个性化优惠券和限时折扣
3 4 Sure Things 提供会员专属福利
4 5 Lost Causes 发送唤醒邮件或推送
5 6 Lost Causes 发送唤醒邮件或推送
6 7 Sure Things 提供会员专属福利
7 8 Persuadables 推送个性化优惠券和限时折扣
8 9 Sleeping Dogs 减少营销推送,避免打扰
9 10 Lost Causes 发送唤醒邮件或推送
Silhouette Score: 0.19700009511955516
4. 复盘与优化
4.1 程序实现优化
-
特征工程:引入更多用户行为特征(如浏览时长、购物车添加次数等)。
-
算法优化:尝试其他聚类算法(如 DBSCAN 或层次聚类)。
-
模型评估:使用轮廓系数(Silhouette Score)评估聚类效果。
from sklearn.metrics import silhouette_score
# 计算轮廓系数
score = silhouette_score(X_scaled, df["cluster"])
print("Silhouette Score:", score)
4.2 营销策略优化
-
A/B 测试:对不同用户群体进行 A/B 测试,验证推荐策略的有效性。
-
动态调整:根据用户行为变化动态调整聚类模型和推荐策略。
5. 完整代码
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score
# 生成虚拟数据
np.random.seed(42)
n_users = 1000
data = {
"user_id": range(1, n_users + 1),
"clicks": np.random.randint(0, 50, n_users),
"purchases": np.random.randint(0, 20, n_users),
"last_active_days": np.random.randint(0, 365, n_users),
"discount_sensitivity": np.random.rand(n_users)
}
df = pd.DataFrame(data)
# 特征选择与标准化
X = df[["clicks", "purchases", "last_active_days", "discount_sensitivity"]]
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# K-Means 聚类
kmeans = KMeans(n_clusters=4, random_state=42)
df["cluster"] = kmeans.fit_predict(X_scaled)
# 映射聚类结果到四象限
cluster_mapping = {
0: "Persuadables",
1: "Sleeping Dogs",
2: "Sure Things",
3: "Lost Causes"
}
df["user_type"] = df["cluster"].map(cluster_mapping)
# 推荐策略
def recommend_strategy(user_type):
if user_type == "Persuadables":
return "推送个性化优惠券和限时折扣"
elif user_type == "Sleeping Dogs":
return "减少营销推送,避免打扰"
elif user_type == "Sure Things":
return "提供会员专属福利"
elif user_type == "Lost Causes":
return "发送唤醒邮件或推送"
else:
return "无推荐策略"
df["recommendation"] = df["user_type"].apply(recommend_strategy)
# 输出结果
print(df[["user_id", "user_type", "recommendation"]].head(10))
# 计算轮廓系数
score = silhouette_score(X_scaled, df["cluster"])
print("Silhouette Score:", score)
6. 总结
通过机器学习技术,我们成功将用户划分为四类,并设计了针对性的营销策略。未来可以通过引入更多特征和优化算法进一步提升模型效果。当然数据都是虚拟的,旨在提供一种思路,实际中要结合真实数据,引入更多用户行为数据,比如:browsing_time
:平均每次浏览时长(分钟),cart_additions
:购物车添加次数,wishlist_additions
:收藏夹添加次数,avg_order_value
:平均订单金额等等,以此来提高用户分类的精准度。另外用户分类方法也有很多像随机森林,都可以尝试一下,技术是工具,达到效果才是目的。