人工智能——K-Means聚类进行青少年市场细分实践
前言
在当今数字化时代,社交媒体平台已成为了解青少年行为和兴趣的重要窗口。通过分析他们在社交网络上的活动数据,我们可以更精准地进行市场细分,为企业制定差异化的营销策略提供数据支持。本文将详细介绍如何使用K-Means聚类算法对青少年群体进行市场细分。
1. 市场细分的意义
市场细分(Market Segmentation)是营销策略中的重要环节,它通过识别消费者在需求、行为和偏好等方面的差异,将整体市场划分为若干个具有相似特征的子市场。这种细分能够帮助企业:
- 精准选择目标市场并制定相应的营销策略
- 发掘潜在市场机会,开拓新市场领域
- 优化资源配置,集中人力物力投入目标市场
- 提升营销效率,实现更好的经济效益
随着Facebook、Twitter等社交平台的普及,青少年在这些平台上发布的文本内容能够真实反映他们的行为模式和兴趣爱好。结合性别、年龄、好友数等基本信息,这些数据为深入挖掘青少年细分市场提供了宝贵资源。
聚类算法特别适合处理这类市场细分任务,因为它能够自动识别数据中的自然分组。本文将以一份包含30000名美国高中生的社交网络数据为例,演示如何使用K-Means算法进行青少年市场细分。
2. 数据准备与环境配置
2.1 技术环境
我们使用Anaconda和Jupyter Notebook作为开发环境,并导入以下必要的Python库:
import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.cluster import KMeans
2.2 数据集介绍
数据集包含30000个样本,时间跨度为2006年至2008年,涵盖了高中各个年级的学生。每个样本包含40个变量:
- 基本信息:毕业年份(gradyear)、性别(gender)、年龄(age)、好友数(friends)
- 兴趣特征:36个关键词变量,涵盖5大兴趣类别:
- 课外活动(篮球、足球、游泳等)
- 时尚(服装、购物、品牌等)
- 宗教(上帝、圣经、耶稣等)
- 浪漫(亲吻、性感等)
- 反社会行为(死亡、酗酒、毒品等)
这些关键词变量的值表示对应词汇在学生社交平台发布内容中的出现频次。
2.3 数据加载
# 读取数据
teenager_sns = pd.read_csv("../data/teenager_sns.CSV")# 查看数据前5行
print(teenager_sns.head(5))# 检查数据维度
print(teenager_sns.shape) # (30000, 40)
gradyear gender age friends basketball football soccer softball \
0 2006 M 18.980 7 0 0 0 0
1 2006 F 18.801 0 0 1 0 0
2 2006 M 18.335 69 0 1 0 0
3 2006 F 18.875 0 0 0 0 0
4 2006 NaN 18.995 10 0 0 0 0 volleyball swimming ... blonde mall shopping clothes hollister \
0 0 0 ... 0 0 0 0 0
1 0 0 ... 0 1 0 0 0
2 0 0 ... 0 0 0 0 0
3 0 0 ... 0 0 0 0 0
4 0 0 ... 0 0 2 0 0 abercrombie die death drunk drugs
0 0 0 0 0 0
1 0 0 0 0 0
2 0 0 1 0 0
3 0 0 0 0 0
4 0 0 0 1 1 [5 rows x 40 columns]
(30000, 40)
3. 数据预处理
3.1 缺失值分析
数据中存在缺失值,特别是gender和age变量:
# 性别变量缺失情况
print(teenager_sns["gender"].value_counts(dropna=False))
# F 22054
# M 5222
# NaN 2724# 年龄变量缺失情况
print('age变量缺失值数目:', len(teenager_sns["age"]) - teenager_sns["age"].count())
# age变量缺失值数目: 5086
gender
F 22054
M 5222
NaN 2724
Name: count, dtype: int64
age变量缺失值数目: 5086
3.2 异常值处理
通过统计描述发现,年龄数据存在明显异常值(最小3岁,最大106岁),不符合高中生群体特征。我们设定合理年龄区间为13-20岁:
def tag_nan(value):if (value >= 13) & (value < 20):return valueelse:return np.nan# 处理异常年龄值
teenager_sns["age"] = teenager_sns["age"].map(tag_nan)
3.3 数据填补
性别填补:为分类变量gender创建"unknown"类别:
teenager_sns["gender"] = teenager_sns["gender"].replace(np.nan, "unknown")
性别编码:使用One-Hot编码处理分类变量:
gender_dummies = pd.get_dummies(teenager_sns["gender"], prefix="gender").astype(int)
teenager_sns = pd.concat([teenager_sns, gender_dummies], axis=1)
年龄填补:使用均值填补年龄缺失值:
age_mean = teenager_sns["age"].mean()
teenager_sns["age_avg_imputated"] = teenager_sns["age"].fillna(value=age_mean)
3.4 数据标准化
K-Means算法基于距离计算,需要对数据进行标准化处理。我们使用Z-Score标准化方法:
# 选定需要标准化的变量
filtered_columns = ["gradyear", "friends", "basketball", "football", "soccer","softball", "volleyball", "swimming", "cheerleading", "baseball","tennis", "sports", "cute", "sex", "sexy", "hot", "kissed","dance", "band", "marching", "music", "rock", "god", "church","jesus", "bible", "hair", "dress", "blonde", "mall", "shopping","clothes", "hollister", "abercrombie", "die", "death", "drunk","drugs", "gender_M", "gender_F", "age_avg_imputated"]# 执行标准化
teenager_sns_zscore = pd.DataFrame(preprocessing.scale(teenager_sns[filtered_columns]),columns=teenager_sns[filtered_columns].columns
)
4. 模型构建与训练
使用scikit-learn的KMeans算法构建聚类模型,设定聚类数为5:
# 构建并训练K-Means模型
teenager_cluster_model = KMeans(n_clusters=5, random_state=4)
teenager_cluster_model.fit(teenager_sns_zscore)
5. 聚类结果分析
5.1 聚类分布
# 查看各聚类的样本数量
teenager_clusters = pd.Series(teenager_cluster_model.labels_)
print(teenager_clusters.value_counts().sort_index())
0 990
1 11056
2 12427
3 874
4 4653
Name: count, dtype: int64
5.2 聚类特征分析
通过分析聚类中心,我们可以识别每个群体的特征:
# 获取聚类中心
centers = pd.DataFrame(teenager_cluster_model.cluster_centers_,columns=teenager_sns_zscore.columns
)# 转置并重命名列
centers_t = centers.T
centers_t.columns = ["cluster_0", "cluster_1", "cluster_2", "cluster_3", "cluster_4"]
以cluster_0为例,查看其主要特征:
print(centers_t["cluster_0"].sort_values(ascending=False).head(10))
kissed 3.089489
drugs 2.807020
hair 2.552678
sex 2.117055
drunk 1.908028
die 1.722156
rock 1.284566
clothes 1.228848
music 1.182868
death 0.910940
Name: cluster_0, dtype: float64
该聚类代表的群体特征明显,具有以下特点:
- 对亲吻(kissed)相关内容表现出强烈兴趣
- 关注反社会行为话题(毒品、死亡、酗酒等)
- 对音乐和时尚有一定关注
6. 营销策略建议
基于聚类分析结果,企业可以针对不同青少年群体制定差异化的营销策略:
- 高风险关注群体(如cluster_0):需要谨慎处理,关注其心理健康,提供正面引导
- 主流群体:针对大多数青少年的普遍兴趣设计产品和营销活动
- 时尚敏感群体:重点推广服装、品牌等时尚相关产品
- 运动爱好群体:专注于体育用品和健康生活方式产品
- 学术专注群体:提供教育类产品和服务
7. 总结
本文通过K-Means聚类算法对青少年社交数据进行市场细分,展示了数据驱动的市场分析方法。这种方法不仅能够帮助企业更精准地理解目标用户,还能为产品设计和营销策略提供科学依据。
需要注意的是,聚类结果的解释需要结合业务背景和专业知识,同时应关注数据隐私和伦理问题,确保分析过程符合相关法律法规。
通过这种数据驱动的市场细分方法,企业可以在激烈的市场竞争中占据先机,实现更精准、更有效的营销。
