怎么自己写代码做网站,关晓彤经纪公司,阿里云怎么做淘客网站,wordpress没有.htaccess1.项目背景与目标
在社交和内容分享领域#xff0c;某APP凭借笔记、视频等丰富的内容形式#xff0c;逐渐吸引了大量用户。作为一个旨在提升用户互动和平台流量的分享平台#xff0c;推荐算法成为其核心功能#xff0c;通过精准推送内容#xff0c;努力实现更高的点击率和…1.项目背景与目标
在社交和内容分享领域某APP凭借笔记、视频等丰富的内容形式逐渐吸引了大量用户。作为一个旨在提升用户互动和平台流量的分享平台推荐算法成为其核心功能通过精准推送内容努力实现更高的点击率和转化率然而用户群体间的行为差异、内容类型的表现差异、以及推荐效果的优劣都对平台的整体运营提出了挑战。深入分析这些关键维度了解用户行为和内容质量成为优化平台运营和算法策略的重中之重。本次数据分析项目旨在通过对用户行为和内容表现的全面探索为平台优化提供数据支持。
2.数据准备
2.1 Python库导入及数据读取
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from scipy.stats import f_oneway
from statsmodels.stats.multicomp import pairwise_tukeyhsd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import AgglomerativeClustering
from sklearn.metrics import silhouette_score
from sklearn.manifold import TSNEdata pd.read_excel(/home/mw/input/content9873/content_analysis_data.xlsx)2.2数据预览
data.head()user_idage_groupgenderdevice_typecontent_idcontent_typetopiclength_secondscontent_sourceexposuresclickslikedfavoritedcommentedsharedfollowed_creatorinteraction_time0U0000135-44MaleiOSC00001Note美妆208搜索500000001U0000218-24MaleiOSC00002Note时尚721搜索600000002U0000318-24MaleAndroidC00003Video美妆106发现页推荐5200000283U0000418-24FemaleiOSC00004Note家居461发现页推荐102000001184U0000525-34FemaleiOSC00005Note美妆478搜索7201010123
print(查看数据信息:)
data.info()查看数据信息:
class pandas.core.frame.DataFrame
RangeIndex: 8000 entries, 0 to 7999
Data columns (total 17 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 user_id 8000 non-null object1 age_group 8000 non-null object2 gender 8000 non-null object3 device_type 8000 non-null object4 content_id 8000 non-null object5 content_type 8000 non-null object6 topic 8000 non-null object7 length_seconds 8000 non-null int64 8 content_source 8000 non-null object9 exposures 8000 non-null int64 10 clicks 8000 non-null int64 11 liked 8000 non-null int64 12 favorited 8000 non-null int64 13 commented 8000 non-null int64 14 shared 8000 non-null int64 15 followed_creator 8000 non-null int64 16 interaction_time 8000 non-null int64
dtypes: int64(9), object(8)
memory usage: 1.0 MBprint(f查看重复值:{data.duplicated().sum()})查看重复值:0数据总共有 8000 行和 17 列数据没有缺失值和重复值。
characteristic data.select_dtypes(include[object]).columns
print(数据中分类变量的唯一值情况)
for i in characteristic:print(f{i}:)print(f共有:{len(data[i].unique())}条唯一值)print(data[i].unique())print(-*50)数据中分类变量的唯一值情况
user_id:
共有:8000条唯一值
[U00001 U00002 U00003 ... U07998 U07999 U08000]
--------------------------------------------------
age_group:
共有:4条唯一值
[35-44 18-24 25-34 45]
--------------------------------------------------
gender:
共有:2条唯一值
[Male Female]
--------------------------------------------------
device_type:
共有:2条唯一值
[iOS Android]
--------------------------------------------------
content_id:
共有:8000条唯一值
[C00001 C00002 C00003 ... C07998 C07999 C08000]
--------------------------------------------------
content_type:
共有:2条唯一值
[Note Video]
--------------------------------------------------
topic:
共有:8条唯一值
[美妆 时尚 家居 美食 旅游 健身 科技 教育]
--------------------------------------------------
content_source:
共有:3条唯一值
[搜索 发现页推荐 关注]
--------------------------------------------------接下来要检查数据是否符合逻辑
clicks0时其他互动行为应为0因为如果用户没有点击内容clicks0那么用户不可能对内容产生互动行为如点赞、收藏、评论、分享、关注或观看内容interaction_time0。因此需要检查是否存在clicks0但liked、favorited、commented、shared、followed_creator或interaction_time不为0的记录。interaction_time应小于等于length_seconds因为用户与内容的互动时间interaction_time不应超过内容的总时长length_seconds。因此需要检查是否存在interaction_time length_seconds的记录。clicks应小于等于exposures因为用户对内容的点击次数clicks不应超过内容对用户的曝光次数exposures。因此需要检查是否存在clicks exposures的记录。
# 逻辑检查1clicks0时其他互动行为应为0
invalid_clicks data[(data[clicks] 0) ((data[liked] ! 0) | (data[favorited] ! 0) | (data[commented] ! 0) | (data[shared] ! 0) | (data[followed_creator] ! 0) | (data[interaction_time] ! 0))]
print(clicks0但其他互动行为不为0的记录数, len(invalid_clicks))# 逻辑检查2interaction_time应小于等于length_seconds
invalid_interaction_time data[data[interaction_time] data[length_seconds]]
print(interaction_time超过length_seconds的记录数, len(invalid_interaction_time))# 逻辑检查3clicks应小于等于exposures
invalid_clicks_exposures data[data[clicks] data[exposures]]
print(clicks超过exposures的记录数, len(invalid_clicks_exposures))# 输出不符合逻辑的记录
if len(invalid_clicks) 0:print(不符合逻辑1的记录)print(invalid_clicks)if len(invalid_interaction_time) 0:print(不符合逻辑2的记录)print(invalid_interaction_time)if len(invalid_clicks_exposures) 0:print(不符合逻辑3的记录)print(invalid_clicks_exposures)clicks0但其他互动行为不为0的记录数 0
interaction_time超过length_seconds的记录数 0
clicks超过exposures的记录数 0feature_map {length_seconds: 内容时长秒,exposures: 内容对用户的曝光次数,clicks: 用户点击次数,interaction_time: 用户观看/阅读该内容的总时长秒
}
plt.figure(figsize(10, 10))
for i, (col, col_name) in enumerate(feature_map.items(), 1):plt.subplot(2, 2, i)sns.boxplot(ydata[col])plt.title(f{col_name}的箱线图, fontsize14)plt.ylabel(数值, fontsize12)plt.grid(axisy, linestyle--, alpha0.7)plt.tight_layout()
plt.show()3.探索用户互动行为
3.1互动指标构建
data[点赞率] data[liked] / data[exposures]
data[收藏率] data[favorited] / data[exposures]
data[评论率] data[commented] / data[exposures]
data[分享率] data[shared] / data[exposures]
data[关注率] data[followed_creator] / data[exposures]3.2年龄段分组分析
# 按年龄段分组计算平均互动率
interaction_metrics [点赞率, 收藏率, 评论率, 分享率, 关注率]
age_group_interaction data.groupby(age_group)[interaction_metrics].mean()age_group_interaction.plot(kindbar, figsize(12, 6))
plt.title(不同年龄段的用户互动行为)
plt.xlabel(年龄段)
plt.ylabel(平均互动率)
plt.xticks(rotation0)
plt.show()def anova_method(target_features,interaction_metrics):# 初始化结果存储anova_results []# 提取目标的互动率数据target_groups data[target_features].unique()# 对每个互动指标进行ANOVA检验for metric in interaction_metrics:groups [data[data[target_features] target][metric] for target in target_groups]f_stat, p_value f_oneway(*groups)anova_results.append({指标: metric,F统计量: round(f_stat, 2),p值: round(p_value, 4),显著性p0.05: 是 if p_value 0.05 else 否})# 转换为DataFrameanova_df pd.DataFrame(anova_results)print(ANOVA检验结果)print(anova_df)anova_method(age_group,interaction_metrics)ANOVA检验结果指标 F统计量 p值 显著性p0.05
0 点赞率 7.69 0.0000 是
1 收藏率 12.38 0.0000 是
2 评论率 3.79 0.0099 是
3 分享率 7.67 0.0000 是
4 关注率 5.13 0.0015 是def tukey_method(target_features,interaction_metrics):# 初始化结果存储tukey_results []# 对每个互动指标进行Tukey HSD检验for metric in interaction_metrics:tukey pairwise_tukeyhsd(endogdata[metric], groupsdata[target_features], alpha0.05)df_tukey pd.DataFrame(datatukey._results_table.data[1:], columnstukey._results_table.data[0])df_tukey[指标] metric # 添加指标列tukey_results.append(df_tukey)# 合并所有结果tukey_df pd.concat(tukey_results, ignore_indexTrue)# 筛选显著的结果significant_tukey_df tukey_df[tukey_df[reject] True].reset_index(dropTrue)print(Tukey HSD检验结果仅显示显著差异)print(significant_tukey_df)tukey_method(age_group,interaction_metrics)Tukey HSD检验结果仅显示显著差异group1 group2 meandiff p-adj lower upper reject 指标
0 18-24 35-44 -0.0120 0.0002 -0.0193 -0.0047 True 点赞率
1 25-34 35-44 -0.0133 0.0000 -0.0206 -0.0059 True 点赞率
2 18-24 35-44 -0.0200 0.0000 -0.0292 -0.0107 True 收藏率
3 25-34 35-44 -0.0203 0.0000 -0.0296 -0.0110 True 收藏率
4 18-24 35-44 -0.0072 0.0066 -0.0128 -0.0015 True 评论率
5 25-34 35-44 -0.0060 0.0328 -0.0117 -0.0003 True 评论率
6 18-24 35-44 -0.0120 0.0000 -0.0188 -0.0051 True 分享率
7 25-34 35-44 -0.0090 0.0044 -0.0159 -0.0021 True 分享率
8 18-24 35-44 -0.0051 0.0085 -0.0092 -0.0010 True 关注率
9 25-34 35-44 -0.0059 0.0012 -0.0101 -0.0018 True 关注率年轻用户群体18-24岁、25-34岁的互动活跃度较高 18-24岁和25-34岁群体的点赞率、收藏率、评论率、分享率和关注率显著高于35-44岁群体。具体差异 点赞率18-24岁和25-34岁比35-44岁高 1.20% 和 1.33%。收藏率18-24岁和25-34岁比35-44岁高 2.00% 和 2.03%。评论率18-24岁和25-34岁比35-44岁高 0.72% 和 0.60%。分享率18-24岁和25-34岁比35-44岁高 1.20% 和 0.90%。关注率18-24岁和25-34岁比35-44岁高 0.51% 和 0.59%。 35-44岁群体的互动行为较低 35-44岁群体的互动率在点赞、收藏、评论、分享、关注等方面显著低于18-24岁和25-34岁群体。这表明中年群体在平台上的活跃度较低可能是因为他们对平台内容的兴趣或参与度相对较弱。
3.3 性别分组分析
# 按性别分组计算平均互动率
gender_interaction data.groupby(gender)[interaction_metrics].mean()gender_interaction.plot(kindbar, figsize(12, 6))
plt.title(不同性别的用户互动行为)
plt.xlabel(性别)
plt.ylabel(平均互动率)
plt.xticks(rotation0)
plt.show()anova_method(gender,interaction_metrics)ANOVA检验结果指标 F统计量 p值 显著性p0.05
0 点赞率 29.48 0.0000 是
1 收藏率 21.97 0.0000 是
2 评论率 16.83 0.0000 是
3 分享率 19.67 0.0000 是
4 关注率 8.00 0.0047 是tukey_method(gender,interaction_metrics)Tukey HSD检验结果仅显示显著差异group1 group2 meandiff p-adj lower upper reject 指标
0 Female Male -0.0112 0.0000 -0.0152 -0.0072 True 点赞率
1 Female Male -0.0123 0.0000 -0.0174 -0.0071 True 收藏率
2 Female Male -0.0066 0.0000 -0.0097 -0.0034 True 评论率
3 Female Male -0.0086 0.0000 -0.0123 -0.0048 True 分享率
4 Female Male -0.0033 0.0047 -0.0055 -0.0010 True 关注率女性用户的互动活跃度显著高于男性用户 在点赞率、收藏率、评论率、分享率和关注率等互动行为上女性用户的活跃度显著高于男性用户。具体来说 点赞率女性比男性高 1.12%。收藏率女性比男性高 1.23%。评论率女性比男性高 0.66%。分享率女性比男性高 0.86%。关注率女性比男性高 0.33%。
3.4使用设备分组分析
# 按设备类型分组计算平均互动率
device_interaction data.groupby(device_type)[interaction_metrics].mean()device_interaction.plot(kindbar, figsize(12, 6))
plt.title(不同设备类型的用户互动行为)
plt.xlabel(设备类型)
plt.ylabel(平均互动率)
plt.xticks(rotation0)
plt.show()anova_method(device_type,interaction_metrics)ANOVA检验结果指标 F统计量 p值 显著性p0.05
0 点赞率 23.35 0.0 是
1 收藏率 44.56 0.0 是
2 评论率 20.42 0.0 是
3 分享率 37.04 0.0 是
4 关注率 32.99 0.0 是tukey_method(device_type,interaction_metrics)Tukey HSD检验结果仅显示显著差异group1 group2 meandiff p-adj lower upper reject 指标
0 Android iOS 0.0094 0.0 0.0056 0.0132 True 点赞率
1 Android iOS 0.0165 0.0 0.0116 0.0213 True 收藏率
2 Android iOS 0.0068 0.0 0.0039 0.0098 True 评论率
3 Android iOS 0.0111 0.0 0.0075 0.0146 True 分享率
4 Android iOS 0.0063 0.0 0.0041 0.0084 True 关注率iOS用户的互动行为显著高于Android用户 在点赞率、收藏率、评论率、分享率和关注率等互动指标上iOS用户的活跃度显著高于Android用户。具体差异 点赞率iOS比Android高 0.94%。收藏率iOS比Android高 1.65%。评论率iOS比Android高 0.68%。分享率iOS比Android高 1.11%。关注率iOS比Android高 0.63%。
4.内容质量评估
4.1内容质量指标构建
data[完播率] data[interaction_time] / data[length_seconds]
data[点击率] data[clicks] / data[exposures]
data[互动率] (data[liked] data[favorited] data[commented] data[shared] data[followed_creator]) / data[exposures]4.2不同内容类型表现
# 按内容类型分组计算平均完播率、点击率和互动率
content_type_quality data.groupby(content_type, observedTrue)[[完播率, 点击率,互动率]].mean()
# 可视化
content_type_quality.plot(kindbar, figsize(12, 6))
plt.title(不同内容类型的质量表现)
plt.xlabel(内容类型)
plt.ylabel(平均值)
plt.xticks(rotation0)
plt.show()anova_method(content_type,[完播率, 点击率,互动率])ANOVA检验结果指标 F统计量 p值 显著性p0.05
0 完播率 33.55 0.0 是
1 点击率 90.27 0.0 是
2 互动率 24.38 0.0 是tukey_method(content_type,[完播率, 点击率,互动率])Tukey HSD检验结果仅显示显著差异group1 group2 meandiff p-adj lower upper reject 指标
0 Note Video 0.0165 0.0 0.0109 0.0221 True 完播率
1 Note Video 0.0574 0.0 0.0455 0.0692 True 点击率
2 Note Video 0.0243 0.0 0.0146 0.0339 True 互动率视频内容的表现优于笔记内容 在完播率、点击率和互动率方面视频Video内容显著高于笔记Note内容。具体来说视频内容的完播率、点击率和互动率分别比笔记内容高出一定幅度。 完播率视频内容的完播率比笔记高了1.65%。点击率视频内容的点击率比笔记高了5.74%。互动率视频内容的互动率比笔记高了2.43%。
4.3不同内容主题表现
# 按内容主题分组计算平均完播率和互动率
topic_quality data.groupby(topic, observedTrue)[[完播率, 点击率,互动率]].mean()topic_quality.plot(kindbar, figsize(12, 6))
plt.title(不同内容主题的质量表现)
plt.xlabel(内容主题)
plt.ylabel(平均值)
plt.xticks(rotation0)
plt.show()anova_method(topic,[完播率, 点击率,互动率])ANOVA检验结果指标 F统计量 p值 显著性p0.05
0 完播率 7.70 0.0 是
1 点击率 21.28 0.0 是
2 互动率 7.14 0.0 是tukey_method(topic,[完播率, 点击率,互动率])Tukey HSD检验结果仅显示显著差异group1 group2 meandiff p-adj lower upper reject 指标
0 健身 家居 -0.0307 0.0052 -0.0558 -0.0056 True 完播率
1 健身 旅游 -0.0177 0.0009 -0.0307 -0.0047 True 完播率
2 健身 时尚 -0.0205 0.0257 -0.0397 -0.0014 True 完播率
3 家居 美妆 0.0342 0.0008 0.0093 0.0591 True 完播率
4 旅游 美妆 0.0212 0.0000 0.0086 0.0338 True 完播率
5 时尚 美妆 0.0240 0.0029 0.0051 0.0429 True 完播率
6 美妆 美食 -0.0133 0.0105 -0.0248 -0.0018 True 完播率
7 健身 家居 -0.0667 0.0035 -0.1198 -0.0136 True 点击率
8 健身 旅游 -0.0532 0.0000 -0.0806 -0.0259 True 点击率
9 健身 时尚 -0.0762 0.0000 -0.1166 -0.0357 True 点击率
10 健身 科技 -0.0882 0.0042 -0.1593 -0.0171 True 点击率
11 健身 美食 -0.0345 0.0009 -0.0596 -0.0093 True 点击率
12 家居 美妆 0.0888 0.0000 0.0361 0.1414 True 点击率
13 教育 美妆 0.0888 0.0217 0.0072 0.1704 True 点击率
14 旅游 美妆 0.0753 0.0000 0.0487 0.1019 True 点击率
15 时尚 美妆 0.0982 0.0000 0.0583 0.1381 True 点击率
16 时尚 美食 0.0417 0.0471 0.0003 0.0831 True 点击率
17 科技 美妆 0.1103 0.0001 0.0395 0.1811 True 点击率
18 美妆 美食 -0.0565 0.0000 -0.0808 -0.0322 True 点击率
19 健身 家居 -0.0446 0.0377 -0.0879 -0.0014 True 互动率
20 健身 旅游 -0.0263 0.0088 -0.0486 -0.0039 True 互动率
21 家居 美妆 0.0506 0.0087 0.0076 0.0935 True 互动率
22 教育 美妆 0.0706 0.0285 0.0041 0.1372 True 互动率
23 旅游 美妆 0.0322 0.0002 0.0105 0.0539 True 互动率
24 时尚 美妆 0.0384 0.0084 0.0058 0.0709 True 互动率
25 美妆 美食 -0.0235 0.0079 -0.0433 -0.0037 True 互动率美妆类内容和健身类全面领跑核心指标 在完播率、点击率和互动率方面美妆、健身内容主题显著比其他内容主题好。 具体来说美妆主题的完播率、点击率和互动率分别比家居、旅游、时尚、美食主题高出一定幅度。 完播率美妆主题的完播率比家居高了3.42%比旅游的高了2.12%比时尚的高2.4%比美食的高1.33%。点击率美妆主题的点击率比家居高了8.88%比教育的高了8.88%比旅游的高7.53%比时尚的高9.82%比科技的高11.03%比美食的高5.65%。互动率美妆主题的互动率比家居高了5.06%比教育高了7.06%比旅游高3.22%比时尚高3.84%比美食高2.35%。 健身类主题的完播率、点击率分别比家居、旅游、时尚主题高出一定幅度但是互动率缺不如美妆类突出。 完播率健身主题的完播率比家居高了3.07%比旅游的高了1.77%比时尚的高2.05%。点击率健身主题的点击率比家居高了6.67%比旅游的高5.32%比时尚的高7.62%比科技的高8.82%比美食的高3.45%。互动率健身主题的互动率比家居高了4.46%比旅游高2.62%。 家居类内容完播率最低 虽然Tukey HSD检验的结果表明家居类与其他类除美妆类和健身类不存在显著差异但通过直方图可以看到家具类的完播率是最低的需要考虑如何提高内容质量或者缩短内容时长确保提高完播率。 教育类内容互动率最低 教育类在完播率上表现比较好通过Tukey HSD检验发现教育类的完播率与美妆类和健身类不存在显著差异但是互动率是最低的需要想办法提高互动率需要考虑互动情况吸引用户互动。 科技类内容点击率最低 科技类与教育类相似存在某个指标比较低的情况科技类是点击率较低可能是因为内容标题不够吸引人或者只能吸引部分人群导致的所以在进行推送的时候科技类可以专门推荐给相关人群比如最近爆火的Deepseek这一类的可以推送给喜欢看GPT的人群而不是分享给宝妈、老人等等因为他们可能不会感兴趣。
5.推荐算法效果分析
# 按推荐来源分组计算平均点击率和互动率
source_performance data.groupby(content_source)[[点击率, 互动率]].mean()
source_performance.plot(kindbar, figsize(12, 6))
plt.title(不同推荐来源的效果)
plt.xlabel(推荐来源)
plt.ylabel(平均值)
plt.xticks(rotation0)
plt.show()anova_method(content_source,[点击率,互动率])ANOVA检验结果指标 F统计量 p值 显著性p0.05
0 点击率 65.37 0.0 是
1 互动率 29.25 0.0 是tukey_method(content_source,[点击率,互动率])Tukey HSD检验结果仅显示显著差异group1 group2 meandiff p-adj lower upper reject 指标
0 关注 发现页推荐 -0.0463 0.0000 -0.0611 -0.0314 True 点击率
1 关注 搜索 0.0324 0.0001 0.0137 0.0512 True 点击率
2 发现页推荐 搜索 0.0787 0.0000 0.0615 0.0960 True 点击率
3 关注 发现页推荐 -0.0237 0.0000 -0.0358 -0.0116 True 互动率
4 关注 搜索 0.0200 0.0060 0.0047 0.0352 True 互动率
5 发现页推荐 搜索 0.0437 0.0000 0.0296 0.0577 True 互动率搜索得到的内容点击率、互动率是最好的 具体来说搜索得到的内容点击率、互动率分别比关注、发现页推荐得到的内容高出一定幅度。 点击率搜索的点击率比关注高了3.24%比发现页推荐高了7.87%。互动率搜索的互动率比关注高了2%比发现页推荐高了4.37%。 关注的内容点击率、互动率是第二好的 具体来说关注得到的内容点击率、互动率分别比发现页推荐得到的内容高出一定幅度。 点击率关注的点击率比发现页推荐高了4.63%。互动率关注的互动率比发现页推荐高了2.37%。
6.用户分群分析
features data[[点赞率, 收藏率, 评论率, 分享率, 关注率]].copy()
scaler StandardScaler()
x_scaled scaler.fit_transform(features)agg_cluster AgglomerativeClustering(n_clusters3)
agg_labels agg_cluster.fit_predict(x_scaled)# 输出聚类结果
print(层次聚类得到的标签, np.unique(agg_labels))
print(层次聚类 Silhouette Score:, silhouette_score(x_scaled, agg_labels))层次聚类得到的标签 [0 1 2]
层次聚类 Silhouette Score: 0.7362942512914383# 使用 t-SNE 将数据降到二维
tsne TSNE(n_components2, random_state15)
x_tsne tsne.fit_transform(x_scaled)# 绘制层次聚类结果
plt.figure(figsize(8, 6))
plt.scatter(x_tsne[:, 0], x_tsne[:, 1], cagg_labels, cmapviridis, s30)
plt.title(层次聚类结果 (t-SNE 降维后))
plt.xlabel(t-SNE 组件 1)
plt.ylabel(t-SNE 组件 2)
plt.colorbar(label聚类标签)
plt.show()可以看到层次聚类效果还是不错的这里我做一个解释为啥要使用t-SNE来降维因为数据之间的线性关系非常弱如图为皮尔逊相关系数矩阵 在非线性的数据中使用t-SNE能更好地揭示簇的结构。
data[聚类] agg_labels
# 计算每个聚类的均值
cluster_means data.groupby(聚类)[[点赞率, 收藏率, 评论率, 分享率, 关注率]].mean()
# 对每个特征进行归一化处理每个特征单独归一化
normalized_means cluster_means.apply(lambda x: (x - x.min()) / (x.max() - x.min()))# 绘制热力图
plt.figure(figsize(15, 8))
sns.heatmap(normalized_means.T, cmapcoolwarm, # 热力图颜色center0.5, # 中心值vmin0, # 最小值vmax1, # 最大值annotcluster_means.T.round(2), # 显示原始均值未归一化的均值fmt.2f, # 格式化显示的数字cbar_kws{label: 标准化得分}) # 颜色条标签plt.xlabel(聚类)
plt.ylabel(特征)
plt.title(各聚类特征分布热力图 (颜色深浅表示在该特征中的相对大小))
plt.tight_layout()
plt.show()for cluster in range(3):cluster_data data[data[聚类] cluster]dist cluster_data[content_source].value_counts(normalizeTrue) * 100print(f\nCluster {cluster} ({len(cluster_data)}人):)print(dist.round(2))Cluster 0 (126人):
content_source
关注 38.10
发现页推荐 38.10
搜索 23.81
Name: proportion, dtype: float64Cluster 1 (7604人):
content_source
发现页推荐 50.43
关注 30.21
搜索 19.36
Name: proportion, dtype: float64Cluster 2 (270人):
content_source
发现页推荐 40.00
关注 35.56
搜索 24.44
Name: proportion, dtype: float64类0 (126人)这类用户的互动情况最好但他们来自关注和发现页推荐的比例相同38.10%而搜索比例较低23.81%。这表明这部分用户对于推荐的内容非常积极互动但并没有转化为关注。需要进一步研究是什么原因导致用户互动后不关注。鉴于这类用户数量较少建议通过优化推荐算法或增加互动后的关注提示提高这类用户的关注率同时尝试将其他用户转化为这类高互动用户。 类1 (7604人)这是人数最多的一类但互动情况最差。发现页推荐占了50.43%关注占30.21%搜索占19.36%。这说明推荐算法可能存在问题需要进行调整。由于无法进一步探索每个用户的喜好建议从业务角度获取更多用户行为数据以便构建详细的用户画像从而进行更有针对性的推荐提高互动率。 类2 (270人)这类用户的互动情况一般但关注率特别高关注35.56%发现页推荐40.00%搜索24.44%。这表明这部分用户对推荐内容有一定的忠诚度但互动不如类0。建议继续保持高关注率同时通过增加互动性内容或活动来提升他们的互动率。
7.用户行为路径分析
# -------------------------------
# 1. 计算整体漏斗数据曝光、点击、聚合互动
# -------------------------------
exposures_total data[exposures].sum()
clicks_total data[clicks].sum()
interaction_total (data[liked].sum() data[favorited].sum() data[commented].sum() data[shared].sum() data[followed_creator].sum())# 构建整体漏斗数据
funnel_data {阶段: [曝光, 点击, 互动],数量: [exposures_total, clicks_total, interaction_total]
}
funnel_df pd.DataFrame(funnel_data)
funnel_df[转化率] funnel_df[数量] / funnel_df[数量].shift(1)
funnel_df.loc[0, 转化率] 1 # 曝光阶段设为100%# 绘制整体漏斗柱状图
plt.figure(figsize(10, 6))
sns.barplot(x阶段, y数量, datafunnel_df, colorskyblue)
plt.title(用户行为漏斗分析总体)
plt.xlabel(行为阶段)
plt.ylabel(数量)
for i, row in funnel_df.iterrows():plt.text(i, row[数量] max(funnel_df[数量])*0.01,f转化率: {row[转化率]:.1%},hacenter, vabottom, fontsize12)
plt.tight_layout()
plt.show()整体转化率分析
曝光到点击转化率为 25.7%表明约四分之一的用户在看到内容后会点击进入但仍有较大优化空间把内容封面和标题设计得更吸引人比如用热点话题或有趣的图片抓住用户的眼球同时推送更符合用户兴趣的内容减少那些用户不感兴趣的内容浪费曝光机会。点击到互动转化率为 29.9%说明点击后的用户中近三分之一会参与互动但互动率仍需提升。
# -------------------------------
# 2. 对点击后的互动行为进行分解分析
# -------------------------------
# 分别计算各互动行为的总数
liked_total data[liked].sum()
favorited_total data[favorited].sum()
commented_total data[commented].sum()
shared_total data[shared].sum()
followed_total data[followed_creator].sum()# 构建点击后各互动行为的数据以点击数为基数计算转化率
interaction_data {互动行为: [点赞, 收藏, 评论, 分享, 关注],数量: [liked_total, favorited_total, commented_total, shared_total, followed_total]
}
interaction_df pd.DataFrame(interaction_data)
interaction_df[点击转化率] interaction_df[数量] / data[clicks].sum()# 绘制点击后各互动行为转化率的柱状图
plt.figure(figsize(10, 6))
# 将 互动行为 同时作为 x 和 hue并设置 dodgeFalse再关闭图例
ax sns.barplot(x互动行为, y点击转化率, datainteraction_df, hue互动行为, paletteviridis, dodgeFalse)plt.title(点击后各互动行为转化率)
plt.xlabel(互动行为)
plt.ylabel(转化率)
# 在柱上标注转化率百分比和原始数量
for i, row in interaction_df.iterrows():plt.text(i, row[点击转化率],f{row[点击转化率]:.1%}\n({int(row[数量])}),hacenter, vabottom, fontsize12)
plt.ylim(0, max(interaction_df[点击转化率]) 0.1)
plt.tight_layout()
plt.show()点击后互动行为转化率
收藏转化率最高11.3%表明用户对内容的保存意愿较强可能因内容对用户具有一定的参考价值通过提示收藏的功能价值如便捷访问、存储有价值内容进一步提高收藏率。点赞转化率为 7.4%用户有一定的认可意愿但未达到理想水平可以添加点赞后的即时反馈如动态动画或点赞计数展示提升用户点赞意愿。评论转化率为3.9%表明用户对深度表达的参与度较低可以提供评论奖励如热评展示、积分奖励或引导用户参与话题讨论增加评论量。分享转化率为 5.0%用户传播内容的意愿较低需要进一步激励可以添加分享奖励机制如分享后获得特定权益并优化分享功能的便捷性实现跨平台分享。关注转化率最低2.4%说明内容对长期吸引用户关注的效果较弱可以在用户互动后主动提示关注如“关注后不错过更多精彩内容”增强用户关注率。
8.关键结论
结论 1年轻用户和女性用户更爱互动 年轻用户更活跃 18-34岁用户的点赞、收藏、评论、分享、关注等互动行为明显高于35岁以上用户。例如18-24岁用户的点赞率比35-44岁群体高了1.20%收藏率高了2.00%。 建议 针对年轻用户多推优质内容提升互动黏性考虑优化中年用户的推荐内容吸引他们更多参与。 女性用户的互动活跃度显著高于男性用户 女性用户比男性用户的点赞率高1.12%收藏率高1.23%评论率高0.66%分享率高0.86%关注率高0.33%。 建议 针对女性用户设计更符合她们兴趣的内容比如美妆、时尚等热门主题同时通过内容创新吸引男性用户提升互动率。
结论2iOS用户比Android用户更愿意互动
iOS用户点赞、收藏、分享等行为更活跃 iOS用户的点赞率比Android用户高0.94%收藏率高1.65%分享率高1.11%评论率高1.65%关注率高0.63%。 建议 针对iOS用户群体优化内容推送策略同时提升Android用户的使用体验增加他们的互动意愿。
结论3视频内容的表现优于笔记内容
视频内容质量更高 视频的完播率比笔记内容高1.65%点击率高5.74%互动率高2.43%。 建议 优先生产视频内容特别是在高互动人群中推广同时优化笔记内容的呈现方式以增强吸引力。
结论4美妆类和健身类内容表现最佳
美妆类内容全面领跑 美妆主题的完播率、点击率和互动率均高于其他主题。例如美妆的点击率比教育内容高8.88%互动率比家居内容高5.06%。健身类内容表现次之 健身内容的完播率和点击率也很高但互动率稍低于美妆。 建议 持续生产美妆和健身优质内容推广它们的成功经验对家居和教育类等内容加强优化提高完播率和互动率。
结论5搜索推荐效果最好
搜索来的内容表现最佳 搜索推荐的点击率比关注内容高3.24%比发现页推荐高7.87%互动率也比发现页推荐高4.37%。 建议 强化搜索功能优化搜索推荐逻辑提升内容精准度发现页推荐需要调整算法增强推送内容的吸引力和互动效果。
结论6数据可以划分为三类用户 类0这类用户很喜欢互动但不爱关注需要研究为什么他们不关注并通过一些小提示或改进推荐让他们更愿意关注。同时要想办法让更多用户变成这样爱互动的用户。 类1这是人数最多但互动最少的一类主要通过推荐页面接触内容推荐算法可能不太对劲需要调整建议收集更多关于这些用户的行为数据了解他们的喜好推荐更合适的内容增加他们的互动。 类2这类用户关注很多但互动一般。要保持他们高的关注度同时通过一些有趣的内容或活动鼓励他们更多互动。
结论7用户互动行为的转化率有提升空间 曝光到点击转化率偏低 仅**25.7%**的用户从曝光到点击说明大多数用户对推荐内容不感兴趣。 建议 优化内容封面和标题设计通过热点话题和吸引眼球的图片提升点击率。 互动行为转化差异大 收藏11.3%转化率最高 用户倾向于保存感兴趣的内容。评论3.9%和关注2.4%转化率最低 用户深度参与和长期关注的意愿较低。 建议鼓励用户收藏内容强调收藏的价值提供评论奖励或引导深度讨论增加评论量在用户点赞或收藏后提示关注创作者提升关注转化率。