用户增长策略:用留存率与搜索画像优化内容分发
2026/9/19 12:05:41 网站建设 项目流程

简介:面向产品运营与用户增长从业者的PDF文档,聚焦小红书从20人初创到1.8亿用户的增长路径。资源围绕AARRR模型下获客成本上升与留存收益的平衡,重点拆解低龄用户留存差的问题,通过按学龄细分、搜索行为分析、Feed流推荐匹配、广告渠道定向等维度,给出数据驱动的优化思路。包体为1个PDF文件,大小647KB,适合作为增长策略、数据分析、用户运营等场景的参考资料。已有152人学习下载。文档内含完整分析框架,包括不同年龄段用户留存分布、拉新渠道分布、高频搜索词点击率、用户兴趣特征等关键数据解读,并总结了针对百度SEM、广点通信息流投放的年龄定向优化建议,能帮助读者理解社交电商平台精细化留存的方法。

1. 留存成本倒挂之后,增长策略从买量转向拆用户

那份关于小红书增长策略的文档,现在回看最有价值的其实不是“从 20 人做到 1 亿 8 千万用户、用时 1644 天”这个结果,而是这条曲线背后怎么用数据不断修正策略。文档里有个反直觉结论:关于低龄用户留存差,团队先假设是学生上课不能带手机、只能周末用,所以平日留存差;但把次日留存和周末留存拉到同一张表里看时,周末留存并没有反弹。一个逻辑上非常合理的假设,仅用两列留存数据就被推翻了。这个案例适合做用户增长、数据分析、推荐策略或广告投放的读者反复看,因为它把 AARRR 从模型变成了可以逐层验收的指标组合,从渠道、内容、分发三个方向各自给出可执行的优化路径。

2. AARRR 取舍下的低龄用户拆分与留存基线计算

2.1 获客成本翻倍时,留存率为什么要跟着翻倍

AARRR 模型在获客成本洼地期可以直接顺序执行:先买量、再激活、后留存的压力不大。但文档里给出的算术关系值得先记下:以前 1000 元可以拉来 100 个用户,留存率 10%,最终留下 10 人;现在同样 1000 元只能拉来 50 人,如果还想留下 10 人,留存率必须从 10% 提到 20%。获客成本涨了多少,留存率就要按同等比例补回来,否则整体 ROI 会直接倒挂。

这条逻辑也解释了为什么文档里讨论“低龄用户留存差”时,第一反应是看渠道。低龄用户大多来自百度 SEM 和广点通信息流,这类用户是花钱买进来的,如果次日留存明显低于大盘,那每一分投放都在直接制造亏损。只优化素材创意或出价解决不了问题,得回到用户本身去看发生了什么。

2.2 用学龄拆掉“18 岁以下”这个过期标签

文档里有一个关键操作:把“18 岁以下”拆成 12 岁及以下、13-15 岁、16-18 岁三个学龄段。原因是不同学龄的用户在内容偏好、使用场景、可支配时间上差异太大,揉在一起看只会得到一个平均后的假象。

实际操作中,第一步是给用户表补一个学龄分组字段。有人会用年龄字段WHERE age <= 18直接圈选,但这个边界太粗。按学龄切分的常见做法是维护一个用户的birth_dateage,在分析层做映射,而不是把“低龄”写成固定的age < 18。这样后续做任何按年龄 breakdown 的分析时,都能保持同一套口径。

2.3 一张 SQL 表同时出具次日留存与周末留存

次日留存和周末留存要放在一起看,才能判断“工作日不能玩手机”的假设是否成立。下面是一段适用于 MySQL 系方言的查询:

WITH user_seg AS ( SELECT u.user_id, CASE WHEN u.age <= 12 THEN '12岁及以下' WHEN u.age BETWEEN 13 AND 15 THEN '13-15岁' WHEN u.age BETWEEN 16 AND 18 THEN '16-18岁' ELSE '19岁及以上' END AS age_group, DATE(u.reg_time) AS reg_date FROM users u ), login_mark AS ( SELECT l.user_id, DATE(l.login_time) AS login_date FROM login_log l ) SELECT us.age_group, COUNT(DISTINCT us.user_id) AS new_users, COUNT(DISTINCT lm_next.user_id) AS next_day_users, COUNT(DISTINCT lm_weekend.user_id) AS weekend_users, COUNT(DISTINCT lm_next.user_id) / COUNT(DISTINCT us.user_id) AS next_day_retention, COUNT(DISTINCT lm_weekend.user_id) / COUNT(DISTINCT us.user_id) AS weekend_retention FROM user_seg us LEFT JOIN login_mark lm_next ON us.user_id = lm_next.user_id AND lm_next.login_date = DATE_ADD(us.reg_date, INTERVAL 1 DAY) LEFT JOIN login_mark lm_weekend ON us.user_id = lm_weekend.user_id AND DAYOFWEEK(lm_weekend.login_date) IN (1, 7) GROUP BY us.age_group;

逻辑说明:user_seg负责按学龄切片并记录注册日期;login_mark把登录行为折叠成“用户 + 日期”粒度,避免重复计算同一天多次登录。次日留存取注册次日是否有登录记录,周末留存取注册后任意周六或周日是否有登录记录。

参数说明:age字段如果缺失,可直接用TIMESTAMPDIFF(YEAR, birth_date, reg_time)现算;DAYOFWEEK在 MySQL 中 1 是周日、7 是周六,其他数据库要换成EXTRACT(DOW FROM ...)strftime('%w', ...)等对应函数。

文档中按这个口径拉出的结果有个关键现象:12 岁及以下和 13-15 岁用户的次日留存显著低于大盘,且周末留存没有反弹;16-18 岁用户则与大盘基本持平。如果只看“18 岁以下”这一个合并值,两个低留存群体被高中生稀释,结论就会偏掉。

提示:周末留存的定义建议锚定“注册后的第一个周末”,而不是所有包含周六或周日的时间窗口。否则新用户可能已经流失了两周,某天偶然回访也会被算成周末留存,指标会失真。

按文档结论整理出的等级示意如下:

学龄分组次日留存周末留存与大盘差异
12 岁及以下明显偏低同样偏低,无反弹显著劣于大盘
13-15 岁明显偏低同样偏低,无反弹显著劣于大盘
16-18 岁接近大盘接近大盘无明显差异
19 岁及以上大盘基准大盘基准基准

2.4 拉新渠道分布:百度 SEM 与信息流的年龄定向

留存分析的下一步,是把用户质量回溯到渠道来源。文档拉了一张“不同年龄段拉新渠道分布”表,发现低龄用户占比最高的渠道集中在百度 SEM 和广点通信息流,占比超过六成。这意味着该渠道的流量质量本身没问题,但用同样的素材和定向去触达低龄用户,现阶段是在浪费预算。

对应动作是投放侧收紧年龄定向。常见做法是在广告平台的定向设置里,把年龄范围的最小值从“不限”或“18-24 岁”调高,并对“低龄高占比”渠道单独建计划,用更窄的年龄组做小流量验证。关键不是完全不投,而是让投放策略先和内容供给能力对齐。

3. 搜索点击率画像:用数据把“来看什么”变成可观测指标

3.1 为什么搜索行为比用户访谈更适合做留存归因

要回答低龄用户来平台想看什么,有两个途径:用户访谈和搜索行为分析。访谈成本高、样本量有限,且用户表达出来的需求往往经过自我美化;而搜索是主动且强意图的行为,用户搜什么就代表他当下想解决什么问题,几乎不带社交表演成分。文档选择用搜索画像来回答这个开放性问题,落地成本低,而且可以直接量化。

搜索画像的价值不只在于列出 Top 词,而在于能看出“需求供给差”:用户高频搜的词,平台内容库里是否有足够内容承接,搜索结果是否让人满意。后面会用到“搜索点击率”和“无点击占比”两个指标来量化这个差值。

3.2 按年龄段构建搜索词画像

先做一个最基础的搜索词分组,让不同年龄段用户的兴趣浮出水面:

import pandas as pd log = pd.read_csv("search_log.csv", parse_dates=["search_time"]) log["age_group"] = pd.cut( log["user_age"], bins=[0, 12, 15, 18, 120], labels=["12岁及以下", "13-15岁", "16-18岁", "19岁及以上"], right=True, ) grouped = log.groupby(["age_group", "search_word"], as_index=False).agg( search_pv=("search_word", "count"), click_pv=("clicked", "sum"), ) grouped["click_rate"] = grouped["click_pv"] / grouped["search_pv"] grouped["no_click_rate"] = 1 - grouped["click_rate"] top_words = ( grouped.sort_values(["age_group", "search_pv"], ascending=[True, False]) .groupby("age_group") .head(20) )

逻辑说明:pd.cut中的bins定义学龄边界,labels与区间顺序对应;clicked列是布尔或 0/1 整数,表示这次搜索后有没有点击搜索结果。search_pv是搜索次数,click_pv是被点击的次数,搜索点击率用二者相除得到。

参数说明:right=True表示区间的右边界闭合,即 13 岁会被归入 13-15 岁而不是 12 岁及以下;如果业务上希望“整岁生日当天算下一个学龄”,把right改成False即可。年龄段边界建议收敛到和业务运营口径一致,否则后续和渠道、内容团队对数据时容易对不上。

按文档中的输出,这份画像能清楚看到四个群体的差异。

年龄段高频搜索主题可读出的需求
15 岁以下简笔画、动漫、头像、明星内容消费型,找壁纸、头像等轻素材
16-18 岁穿搭、护肤、减肥开始关注外形管理
19-23 岁彩妆、护肤、穿搭消费决策前置,接近购买
29-33 岁结婚、食谱、装修生活阶段驱动的实用内容

3.3 无点击占比 40% 与 20%:给内容缺口定阈值

搜索点击率只能反映“搜索结果是否被认可”,要定位供给缺口,还需要引入“无点击占比”这个派生指标。文档中实际用到了两类词:无点击占比超过 40% 的高频搜索词,以及无点击占比低于 20% 的高频搜索词。前者表示大量用户搜了但什么都没点,后者则表示内容承接得不错。

实现上就是在上面的grouped结果后追加一组筛选:

no_click_high = grouped[grouped["no_click_rate"] > 0.4].sort_values("search_pv", ascending=False) no_click_low = grouped[grouped["no_click_rate"] < 0.2].sort_values("search_pv", ascending=False)

逻辑说明:no_click_high得到的是“搜索量大但没人点结果”的词,优先看这些词能直接暴露内容供给断点;no_click_low则是做得好的对照组,用来验证分析方法本身是否合理。如果所有词的点击率都低,要先怀疑搜索结果页的技术实现,而不是内容不足。

参数说明:40% 和 20% 这两个阈值来自文档中的取数习惯,实际使用时建议先看整体分布再定,避免因类目差异导致误判。比如商品词天然点击率高于明星词,直接套同一个阈值会把明星内容一刀切掉。

3.4 明星内容和真实需求之间的错位

文档里对这个指标组合的解读值得注意:范冰冰、迪丽热巴这类明星名字搜索量不小,但年轻用户的无点击占比明显更高;而减肥、护肤、美甲这类词的无点击占比很低。这说明低龄用户搜明星词时,想找的可能是粉丝团、八卦等方向,而平台提供的是明星工作之外的生活化内容,比如用什么化妆品、喜欢吃什么零食,二者并不匹配。

这个发现单独看是内容供给问题,但它直接影响留存:用户因为某个搜索意图进来,连续几次搜不到想要的结果,就会觉得平台“没有我想看的信息”,随后在 Feed 流里的活跃度也会下滑。做内容策略时,这种“搜索点击率低 + 无点击占比高”的组合词,应该被纳入内容生产的负面清单,而不是继续加大投放。

注意:搜索无点击占比只能定位“不满意的搜索”,不能直接回答“用户想看什么替代内容”。需要配合搜索后行为(跳出、改搜、浏览时长)做交叉验证,否则可能把内容缺口归因错了方向。

4. Feed 流分发匹配度:兴趣标签、内容丰满度与喜好偏差

4.1 从兴趣标签的头部和尾部看年龄差异

新用户注册时会选择兴趣标签作为后续推荐的种子,这个选择行为本身就是有价值的用户表达。文档从两个角度对比了 13-15 岁用户和 30 岁以上用户:头部集中度和尾部厚度。13-15 岁用户前四名标签占比只有 20%,30 岁以上能达到 30%;反过来,年轻用户排名靠后的 4-5 个标签合计占比超过 2%,年长用户则低于 1.5%。

这说明年轻用户兴趣更分散,不容易用少量标签概括。推荐系统如果按标签做硬匹配,年轻用户很容易被局限在几个头部类目里,感知到的内容多样性不够。

想量化这种差异,可以直接算每个年龄段的标签选择分布:

import pandas as pd tag = pd.read_csv("interest_tag.csv") tag["age_group"] = pd.cut( tag["user_age"], bins=[0, 12, 15, 18, 120], labels=["12岁及以下", "13-15岁", "16-18岁", "19岁及以上"], ) tag_cnt = tag.groupby(["age_group", "tag_name"], as_index=False).size() tag_cnt["pct"] = tag_cnt.groupby("age_group")["size"].transform(lambda x: x / x.sum()) tag_cnt = tag_cnt.sort_values(["age_group", "size"], ascending=[True, False]) head_cr = tag_cnt[tag_cnt.groupby("age_group").cumcount() < 4].groupby("age_group")["pct"].sum() tail_ratio = tag_cnt[tag_cnt.groupby("age_group").cumcount() >= 4].groupby("age_group")["pct"].sum()

逻辑说明:cumcount() < 4取每个年龄段下前四个标签算头部占比;剩余标签计入尾部。head_crtail_ratio分别对应文档中“头部不集中”和“尾部不长尾”两个判断。

参数说明:头部取前 4 个标签是文档中的口径,如果业务标签体系有 20 个以上可选标签,可以改成前 5 或前 10,但要保证所有年龄段比较时用同一规则。

4.2 内容丰满度:选定标签后有没有足够的笔记可看

用户选了兴趣标签只是第一步,平台能不能在这个标签下提供足够的可消费内容,是留存的关键。文档用“内容丰满度”来衡量:对比用户选择的标签分布和实际笔记曝光分布。时尚穿搭被最多人选择,曝光也最多,这是合理的;音乐、游戏等品类选的人同样不少,但曝光明显偏少,说明这些类目的内容供给严重不足。

这种不匹配对用户感知的影响是直接的:注册时选了一个兴趣标签,进入首页后连续刷不到相关笔记,预期立刻落空。做精细化运营时,有两种处理方式:要么运营团队重点补内容,要么在产品端暂时把内容不足的品类从新用户兴趣选择中拿掉,避免用户抱着期望进来却得不到满足。

4.3 用曝光占比和喜好占比计算分发偏差指数

分发匹配度是最后一层验证。文档采用热力图方式,从曝光分布和喜好分布两个维度看同一品类在不同年龄段的差异。以穿搭为例:平台分发给 13-15 岁、19-23 岁、34 岁以上用户的曝光量没有太大区别,但用户的喜好度(点赞、评论、收藏)差别非常大。这就是典型的分发机制问题:内容本身没有年龄属性,但分发策略把大众化内容平均地推给了所有人。

可以用一个量化脚本来落地判断:

import pandas as pd feed = pd.read_csv("feed_delivery.csv") feed["exposure_ratio"] = feed["exposure_cnt"] / feed.groupby("category")["exposure_cnt"].transform("sum") feed["interact_score"] = feed["like_cnt"] + 2 * feed["comment_cnt"] + 3 * feed["collect_cnt"] feed["prefer_ratio"] = feed["interact_score"] / feed.groupby("category")["interact_score"].transform("sum") feed["bias_index"] = feed["exposure_ratio"] - feed["prefer_ratio"]

逻辑说明:exposure_ratio表示某品类下某个年龄段获得的曝光占该品类总曝光的比例;interact_score用加权方式把评论、收藏两种高成本行为加了更高权重;prefer_ratio代表该年龄段对这个品类的真实喜好占比。bias_index是二者的差值,大于 0 表示平台给它分了相对更多的曝光,但用户并不买账。

参数说明:评论权重 2、收藏权重 3 需要结合业务调整。如果产品更看重收藏行为,可以把收藏权重调到 5;如果只看点击,直接用click_cnt / exposure_cnt也能做出一个简化版本。热力图在分析阶段是可视化工具,但落地到监控里时,只需要盯 bias_index 的变化方向。

按文档结论整理如下:

品类曝光分布喜好分布判断
时尚穿搭各年龄段接近年龄差异较大分发大众化,需按年龄细分
音乐整体曝光偏少年轻用户喜好更高内容供给不足
游戏整体曝光偏少年轻用户喜好更高内容供给不足
美妆护肤各年龄段接近年长用户偏好集中可考虑提高年轻用户曝光占比

5. 把分析结果变成投放定向、内容出库和监控指标

分析做到这里已经回答完三个问题,但这个案例真正的价值在于行动项。文档给出的方向很明确:投放侧对低龄用户占比超过 6 成的百度 SEM 和广点通信息流设置更严格的年龄定向;内容侧补充音乐、游戏等供给不足的品类,或者在补齐之前暂时从注册兴趣标签里拿走;推荐侧调整 global popular 内容在不同年龄段的分发比例。

最值得落地的技巧是把结论转成可监控的指标阈值,而不是一次性报告。这里有一个可以直接复用的思路:从高点击率搜索词里建立“投放题材词库”,从无点击占比超过 40% 的词里建立“内容风险词库”。投放团队做素材时,优先使用前一个词库里的题材,比如减肥、祛痘、护肤、粉底液,因为这些词已经被验证有内容承接能力;后一个词库则直接标记为暂不建素材。

落地监控时,可以这样操作:

CREATE TABLE growth_strategy_monitor AS SELECT stat_date, SUM(CASE WHEN no_click_rate > 0.4 THEN 1 ELSE 0 END) AS risky_kw_cnt, SUM(CASE WHEN no_click_rate < 0.2 THEN 1 ELSE 0 END) AS healthy_kw_cnt, AVG(CASE WHEN age_group IN ('12岁及以下', '13-15岁') THEN next_day_retention END) AS junior_retention, AVG(CASE WHEN age_group = '16-18岁' THEN next_day_retention END) AS senior_retention FROM daily_search_and_retention GROUP BY stat_date;

逻辑说明:这个表把两组关键信号收敛到一行:risky_kw_cnt衡量内容风险词数量变化,healthy_kw_cnt衡量内容承接是否变好,junior_retentionsenior_retention分别跟踪低龄与高中生的次日留存。把这四个字段放入周报看板,策略是否生效就只看趋势。

把它拆成每周循环的动作是:周一跑上一周的搜索词画像,比较“内容风险词库”的个数有没有下降;再跑一次分发偏差指数,看 bias_index 大于 0 的品类是否有收敛;最后看低龄用户和大盘的次日留存差是否缩小。三个动作分别对应内容、算法、留存三个团队,谁有问题在数据上直接暴露。把无点击占比 40% 和分发偏差指数大于 0 这两个阈值写进周度看板,下一周的优化点会在数据里自动浮现。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询