先说结论:做体育社区这几年,我最大的认知反转是——技术能解决“找到人”,但解决不了“愿意再来”。这句话,是我们团队在球友会・(qy)千亿球友会上花了三年、烧掉几千万换回来的。
上周五23点17分,产品群里一位ID叫“老王开球”的用户@了我。他甩来一张截图:系统把一位中式八球三档水平的周末球友,匹配给了刚从斯诺克青训回来的准职业选手。三局打完,老王一共上手四次,总共出杆十一杆。
他问我:“你们算法是不是只看距离?”
我回了他一句实话:是我们把“球友”这两个字想简单了。那天晚上我们拉着算法、供应链和客服开了两个小时会,也顺便把球友会・(qy)千亿球友会这三年踩过的坑重新捋了一遍。下面这些,是我愿意公开讲的部分。

上面这张图是我们杭州一家合作球房的周五夜场。看起来热闹,但你可能不知道,这里每一张球台的开关时间、每一局的用时、甚至每一杆的节奏,都会回流到球友会・(qy)千亿球友会的匹配模型里——这也是我们后来才想明白的事:约球这件事,数据不在App里,在球台上。
一、把“球友”当成一个标签,是我们犯的第一个错
2023年刚做的时候,我们的匹配逻辑朴素得可爱:同城、同项目、时间窗重叠、距离3公里以内,四条一撞就推。上线首周数据很漂亮,匹配成功率61%,我们还开了香槟。
一个月后,30日复约率只有12%。也就是说,十个人里有九个被匹配一次之后,就再也没点开过。
拆开看原因,排第一的不是距离,是球力差。我们把用户切成两百多维标签,用LightGBM做粗排,跑了两周发现,真正决定“这个人会不会再来”的特征只有三个:双方球力差的绝对值、单局平均出杆节奏、以及输赢的分布形态。前两个决定体验,第三个决定情绪。这也是球友会・(qy)千亿球友会最早的一课。
于是我们做了“球力值”——你可以理解成台球版的ELO,但不能照抄。中式八球、斯诺克、九球要分开建模,让球规则要进模型,清台率、开球进球率、防守回合占比都得单独算权重。这套东西没有什么炫技的地方,唯一的难点是冷启动:新用户没有数据。
我们的解法有点笨——和球房合作,让店员在开台时记三行:几人、什么项目、大概水平。一家店一天多花二十分钟,我们给店长每月补贴三百块。一个城市四十家店,一年下来是十四万级别的成本,但它把新用户的“首局体验合格率”从54%拉到了83%。
这笔账很好算:一个新用户首局体验不合格,我们大概要花68元的券才能把他拉回来一次;而十四万的地推记录成本,摊到新增用户身上不到4元。这就是我在内部常说的一句话——有些技术问题,答案是运营;有些运营问题,答案是硬件。
二、约球的“洪荒之力”,藏在两百毫秒里
很多人以为约球产品的核心是推荐,其实不是,是并发扣台。
周五晚上八点,一个热门球房的黄金台位,可能有三十个人在同一秒点“预约”。我们最早的实现是数据库行锁,结果就是超卖:三个人同时收到确认短信,到了现场只有一张台。超卖率一度到3.7%,每次超卖我们要赔一张20元券,加上客服工单平均6元,再算上用户流失,单次事故的综合成本在90元以上。
后来我们把链路重写了三遍:库存用Redis做预扣,落库走乐观锁加版本号,跨城跨店的长事务用TCC补偿,撮合窗口固定90秒,窗口内双向确认才真正锁台。改完之后超卖率降到0.02%,撮合链路的P99从800毫秒压到210毫秒。
别小看这590毫秒。我们把延迟和转化率做过一次回归,撮合响应每快100毫秒,晚间黄金时段的确认率提升约1.4%。整个链路优化下来,等于凭空多出8%的有效订单——没有多花一分钱推广费。
当然代价也有。撮合服务从三台八核机器扩到十一台,Redis集群内存翻了三倍。那年冬天机房空调坏了半天,运维兄弟说我们那排机器“自己就是一台电暖器”。但对比一下:8%的订单增量,按当时的客单价折算,一个季度就把三年的机器钱挣回来了。
这张是我们撮合系统的监控大盘。外行看是几条曲线,我们看的是“哪座城市的球台在哪个时段被浪费了”。球友会・(qy)千亿球友会后来做的动态时段定价,源头就是这块屏幕——把闲置的下午时段用低价供给价格敏感的学生用户,把黄金时段留给愿意付费的上班族,整体翻台率提了27%。
三、会员体系不是发券,是一本必须对得上的账
我必须坦白,我们第一版会员体系是失败的。逻辑很简单:充值送、邀请送、签到送,券发出去一堆,核销率不到三成。用户不傻,他们知道哪些券是“用不掉的券”。
第二版我们换了个思路:不做券,做账本。这也是球友会・(qy)千亿球友会在会员体系上最重要的一次转向。
- 积分与储值分账管理:储值是真金白银的负债,积分是营销费用,两条账必须物理隔离,任何一次混用都是财务事故。
- 幂等与补偿:所有增减积分接口带幂等键,跨服务调用走TCC,日终跑全量对账,差异超过万分之零点五自动熔断。
- 风控前置:设备指纹、行为序列、IP聚集度三路特征进规则引擎,异常账号直接进人工池。
这套东西上线之后,羊毛党账号占比从9%降到1.2%。看起来是风控的功劳,其实是账本的功劳——因为每一分积分都能追到一笔订单,作弊成本被抬高了。
更重要的变化在用户侧。券的核销率从29%升到67%,不是因为券变多了,是因为我们开始按“球力值”和“常去球房”发定向权益:一个每周三晚上固定去同一家店的中式八球玩家,收到的是那家店周三的台费折扣,而不是一张全城通用的、看起来很美但根本用不上的券。
成本上我们也算过一笔账。早期粗放补贴的时候,我们的LTV/CAC是0.6,意思是每拉来一个用户,一辈子能赚回来的钱只有获客成本的一半多点。改成定向权益之后,CAC没降多少,但LTV涨到原来的三倍,比值到了1.8。这就是我说的:补贴像往江里撒盐,撒得多不代表味道对。
四、场馆那头的“脏活”,才是真正的护城河
做线上的人容易有个幻觉,觉得把App做好就赢了。我们花了两年才承认:球友会・(qy)千亿球友会真正的壁垒不在代码里,在全国两千多家球房的配电箱旁边。
球房是个非常传统的行业。老板关心的事情只有三件:今天开了几台、这月电费多少、有没有人逃单。我们做的第一件事不是给他装App,是给他装一个计费盒子:开台自动亮灯、结账自动断电、断网本地缓存48小时、恢复后补传。
技术上讲这没什么高深的,MQTT长连接加边缘缓存,一台设备成本一百多块。但落地是脏活:有的球房配电箱在二楼杂物间,有的球台是三年前的老款没有信号接口,有的老板坚持“我这灯不能自动关,客人还在抽烟”。一个城市四十家店,改造周期平均二十一天,两个地推加一个硬件工程师常驻。
值不值?我给一组数:装了盒子的门店,逃单率下降92%,翻台率提升27%,我们从中拿到的SaaS服务费和交易分佣,单店月均贡献在三百到八百元之间。两千家店,就是一年近千万的稳定流水,而且是极低获客成本的流水。
更值钱的是数据。人、台、时间三要素对齐之后,我们才知道一座城市真实的台球供给曲线长什么样——哪天下雨人多,哪个小区周末缺台,哪个时段全是新手。这些东西,靠问卷永远问不出来。
五、为什么我们还在加注
回到老王那条消息。会后我们改了匹配策略:球力差超过两档必须双方确认,新手默认进“陪练池”,愿意带新手的用户拿双倍积分。上线两周,三档以下用户的30日复约率从12%涨到31%。
这就是我做球友会・(qy)千亿球友会三年最深的体会:这个行业没有一招制敌的技术奇迹,只有一堆必须做对的笨功夫——球力值要一局一局地记,库存要一毫秒一毫秒地抢,账本要一分一分地对,盒子要一台一台地装。
如果你问我,接下来最想做的事是什么,我的答案是继续把“人”这件事做厚。技术能算出谁和谁该打一场球,但算不出一个人为什么愿意在周三晚上八点,穿过半座城去见三个不认识的球友。前一件事是工程,后一件事是信任。
而信任这个东西,一旦建起来,比任何算法都难被复制。这大概也是我们敢在2026年还继续加注线下、加注硬件、加注那些看起来一点都不“互联网”的脏活的原因。截至写作时,球友会・(qy)千亿球友会已经覆盖了全国一百多个城市的球房网络,但比起这个数字,我更在意的是那个从12%变成31%的复约率——它才是我们真正做出来的产品。


