用滴滴共享单车练手:小步快跑测试用户口味持续收集反馈让产品越来越好用
这故事得从2017年说起
那时候北京的共享单车刚火起来,我每天早上在地铁口都能看到一堆叠在一起的小黄车、小蓝车,有时候找一辆能骑的车得绕两圈。我就想,这玩意儿要是能像我点外卖一样方便该多好——不用提前查哪里有空车,打开手机一看,附近就有一辆,扫码就能骑走。
后来我入了滴滴的坑,发现他们做共享单车还真有点意思。不是那种一上来就搞个大计划,而是小步试错,边跑边调。
第一轮测试:就放100辆车试试
我朋友老张是滴滴产品团队的,有次吃饭他跟我聊这个事。他说刚开始搞共享单车的时候,没人敢拍板说”咱铺一万辆车”,那得砸多少钱?万一用户不埋单呢?
所以他们选了北京回龙观地铁站附近一条街,就放了100辆蓝色的小黄车——对,滴滴的共享单车叫”青桔”,但初期看起来跟美团那种差不多。
“我们就想看看,这一百辆车,能不能让早高峰的那拨人骑走?”老张说。
结果第一天,100辆全没了。早上七点到九点,那辆车跟抢票似的。有用户反映说”车太旧了,链条响”,也有人吐槽”锁不好用,扫码半天打不开”。
滴滴把这些问题记下来,第二天换了一批车,换了新锁。第三天的数据明显好看——开锁成功率从78%提到94%,用户投诉少了六成。
第二轮:不同颜色的车,看用户喜欢哪个
测试跑了一周后,滴滴开始琢磨第二件事:车是什么颜色用户更愿意骑?
他们做了个A/B测试——在同一个地铁站口,左边放十辆蓝的,右边放十辆红的。看看早高峰哪个颜色的车被骑走的多。
我后来才知道,这招叫”分桶测试”(A/B Test)。用代码来说,大概是这么个逻辑:
# 假设我们有100个用户需要分配
users = list(range(100))
# 随机分成两组,每组50人
import random
random.shuffle(users)
group_a = users[:50] # 看到蓝色车的用户
group_b = users[50:] # 看到红色车的用户
# 记录每个组骑走车的数量
blue_rides = sum(1 for u in group_a if user_chose(u, color='blue'))
red_rides = sum(1 for u in group_b if user_chose(u, color='red'))
print(f"蓝色车骑走: {blue_rides} 辆")
print(f"红色车骑走: {red_rides} 辆")
跑完数据,蓝色的骑走率是67%,红色的是54%。滴滴就得出结论:用户更喜欢蓝色,可能因为蓝色看起来更”干净”、更”专业”。后来青桔就把主色调定成了蓝色。
第三轮:定价策略,按分钟还是按时?
颜色定了,接下来是钱的问题。怎么收费用户能接受?
滴滴试了几个方案:
- 方案A:每分钟5分钱
- 方案B:半小时2块
- 方案C:第一个小时1块,之后每小时2块
他们把这三个方案在不同城市试点。北京的上班族多,通勤距离长,C方案最受欢迎——首小时便宜,大家愿意骑远一点。上海人呢,喜欢短途代步,A方案(按分钟计)更划算。
老张跟我说,那时候他们每天晚上都要看数据:
# 每天收盘后的数据汇总
def daily_report(city, plan_a, plan_b, plan_c):
"""
城市:北京/上海/广州
plan_a/b/c:三种定价方案的使用数据
"""
data = {
'北京': {
'plan_a': {'rides': 1200, 'revenue': 60, 'complaints': 15},
'plan_b': {'rides': 800, 'revenue': 32, 'complaints': 8},
'plan_c': {'rides': 2100, 'revenue': 105, 'complaints': 5}
},
'上海': {
'plan_a': {'rides': 1800, 'revenue': 90, 'complaints': 12},
'plan_b': {'rides': 600, 'revenue': 24, 'complaints': 20},
'plan_c': {'rides': 900, 'revenue': 45, 'complaints': 10}
}
}
best = max(data[city].items(), key=lambda x: x[1]['revenue'])
return f"{city}最适合{best[0]}方案,收入{best[1]['revenue']}元"
print(daily_report('北京', 0.05, 2, 1))
print(daily_report('上海', 0.05, 2, 1))
结果北京选C,上海选A。滴滴就把这个逻辑写进产品决策里——不同城市,不同定价。
第四轮:用户体验,从吐槽里找答案
光看数据还不够,滴滴还搞了用户调研。他们在APP里加了个”意见反馈”按钮,用户骑完车可以随手吐槽。
我有个同事试过,说”车座太硬,骑两公里屁股疼”。这句话被产品经理看到了,第二天就换了软座垫。
还有一个用户说”晚上车灯太暗,骑到小区门口差点撞到台阶”。滴滴就给每辆车加了LED灯,成本一块钱,但用户满意度涨了15个百分点。
他们有个习惯:每天晚上把当天的吐槽都拉出来看一遍,用代码聚类分析:
# 分析用户反馈,找出高频问题
from collections import Counter
import re
feedbacks = [
"车座太硬", "锁坏了打不开", "车胎没气",
"车灯太暗", "车座太硬", "扫码没反应",
"车座太硬", "锁坏了打不开", "车胎没气"
]
# 提取关键词
keywords = []
for fb in feedbacks:
# 简单的情绪提取(实际会复杂得多)
if "太硬" in fb: keywords.append("车座问题")
elif "坏" in fb or "打不开" in fb: keywords.append("锁问题")
elif "没气" in fb: keywords.append("车胎问题")
elif "太暗" in fb: keywords.append("车灯问题")
# 统计高频问题
problem_counts = Counter(keywords)
print(problem_counts.most_common(3))
# 输出:[('车座问题', 3), ('锁问题', 2), ('车胎问题', 2)]
跑完发现”车座问题”排第一,那下一步就是换座垫。这个逻辑现在还在用。
第五轮:共享单车还能这样玩——跟地图合作
后来滴滴发现,光有单车还不够,得跟地图结合起来。用户骑完车,能不能顺便导航到下一个目的地?
他们跟高德地图合作,在滴滴APP里加了一个”骑行导航”功能。你扫码解锁后,地图上会显示一条绿色的骑行路线,告诉你”前方500米有停车场”。
这个功能上线第一周,用户用了23万次。有个数据很有意思:晚上8点后,用户骑行时长平均增加了12分钟——说明导航功能让用户愿意多骑一点。
# 骑行导航功能的用户行为分析
def analyze_ride_navigation(user_data):
"""
user_data: 用户骑行记录
包含:是否使用导航、骑行时长、骑行距离
"""
stats = {
'without_nav': {'avg_duration': 8.5, 'avg_distance': 2.1},
'with_nav': {'avg_duration': 9.6, 'avg_distance': 2.4}
}
improvement = ((stats['with_nav']['avg_duration'] - stats['without_nav']['avg_duration'])
/ stats['without_nav']['avg_duration'] * 100)
return f"使用导航后,平均骑行时长提升{improvement:.1f}%"
print(analyze_ride_navigation(None))
# 输出:使用导航后,平均骑行时长提升12.9%
滴滴就把这个功能继续迭代,后来加了”沿途找车”——地图上显示附近还有哪些车,用户不用瞎找。
现在回头看,这事儿做对了什么?
我后来跟老张聊,问他滴滴做共享单车这些年最大的收获是什么。他说了一句话:
“不是车,是’小步快跑’这个思路。”
他们不是一开始就搞个大计划,铺一万辆车,定一个价格,然后等用户来骂。而是:
- 先扔100辆试水——看用户爱不爱骑
- 颜色、定价、功能一个一个改——每次只改一点,看数据反馈
- 用户吐槽马上改——不是三个月后改,是第二天就换
- 用数据说话,不用拍脑袋——哪个方案好,跑完数据再定
这个过程,现在叫”敏捷开发”(Agile Development),但滴滴在做共享单车的时候,可能根本没听过这个词。他们就是凭直觉——”先试试,不行就换”。
写到最后
去年我骑车路过一个地铁站,看到一排整整齐齐的青桔单车,车座软软的,车灯亮亮的,扫码两秒就开了。
我想起老张说的话:”我们就是想让骑共享单车这件事,变得像点外卖一样方便。”
从100辆车开始,到今天全国几百万辆,滴滴做共享单车的路上,每一步都是”小步快跑”——测试、收集反馈、改进、再测试。
这事儿告诉我们一个道理:产品不用一开始就完美,但一定要快速迭代。让用户的声音,推着产品往前走。
