聊聊6/2的灰熊做空报告

发布于: 雪球转发:8回复:51喜欢:4

$跟谁学(GSX)$

今天gsx爆拉13%,相信做空gsx的各位心中应该是五味陈杂。我不知道为什么今天gsx的股价能有如此大幅的拉升,但是当我看到灰熊的做空报告的时候,我却变得冷静了。

比起上次浑水以用户join time和ip作为依据,来推断大量bot的报告,灰熊这次的做空报告,有理有据,非常专业。引用的是跟谁学的内部数据,不再是浑水般的旁敲侧击。除了报告外,灰熊还提供了操作的视频、以及抓取报告中数据所用的python程序。程序中包含两个部分:第一个部分是利用官方API抓取课程信息估算报名人数和收入;第二个部分是巧妙获取当前gsx的用户总数来监测gsx用户变化情况。

注意:所有的一切都是我的个人观点,不构成投资建议。

1)获得gsx内部统计的课程报名人数和退课人数

灰熊发现跟谁学网站存在一个API,可以抓取到某课程的所有信息,其中包括enrollment_count和left_count。我个人的理解,这是一个API的设计缺陷:这些内部数据不应该暴露在一个可以随意访问API中。

其实从名字上就可以看出,enrollment_count和left_count这两个字段对应的是报名人数和退课人数。出于严谨,灰熊的研究人员在深夜几乎不可能有人报名的时候,对某个课程进行了报名测试。付款成功后,enrollment_count加1,left_count减1,由此得出结论,这两个字段就是在对报名人数进行统计。

接下来,灰熊用关键词在跟谁学的网站进行搜索(一年级, 二年级, 三年级等),找出相关课程ID。然后用课程ID配合API,搜集课程数据。最后对所有课程的价格、报名人数的统计,计算出了gsx真实的报名人数和收入。灰熊说,财报中披露的数据,约是统计数据的900%。其实从后文的appendix C可以看到,这里的enrollment_count可能还有水分,因为有课程在创建的几分钟之内,enrollment就已经2000+。

灰熊提供的程序中,包含一个名为get_gaotu_enrollment_counts.py的脚本,该脚本会根据关键词搜索所有在线课程,并且拿到课程信息保存到一个json文件中。我刚刚运行该程序,发现gsx已经对API进行了修改,所有课程的enrollment_count和left_count都已清零!

2)gsx在不断地利用机器人自动创建新用户

灰熊发现,跟谁学的用户数量成完美的线性增长!其中的奥秘在于,如果在15秒内gsx用户的增长速度落后于该线性关系,接下来的15秒gsx会自动产生新用户来“纠正”缓慢的用户增长速度。灰熊对gsx的监控已不是一朝一夕,他们甚至还捕捉到了gsx的机器人因为技术故障“掉队”,然后飞速赶上的情形(报告第8页图2)。灰熊认为在5月8日到5月21日间,gsx新增的79w新用户中,真实用户数量不足79,其结论让人不寒而栗。

灰熊提供的程序,另一个部分就是如何监控新增用户数量。该程序现在已经不可用了,因为gsx已经封锁了使用用户id看profile的API。其中的缘由,“不得而知”。这里要提到一个小插曲,跟谁学的用户ID并不是像普通编号那样递增的,它是经过一个简单的编码过程,类似于加密:比如说第1个用户,它的用户id可能是6712783123这样没有规律的N位数字。内部来看,该用户的编号是1,外部来看他的用户id是6712783123。这样的编码会使外部人士无法得知用户的内部的编号变化规律。灰熊之所以可以监控gsx的用户增长情况,这就不得不提到灰熊程序中所引用的另一个程序片段。该程序片段出于法律原因,灰熊并没有提供,但是却暗示大家如何获取。灰熊提供的线索指向一个gsx旧员工的开源的内部代码!这份完整的程序以后再作分析,但是灰熊引用的正是内部用户编号与外部用户id之间的编码算法!有了这段程序,灰熊就可以通过猜测内部的编号,获知外部的用户id。具体用法如下:程序猜测gsx此时有9999个用户,那么用内部的程序片段可以得到9999号用户对应的用户id。再根据gsx提供的用户profile API去查看这一用户,如果该用户存在,那么可以确定gsx至少有9999个用户。通过不断地猜测,程序可以获知此时此刻gsx的用户的最大编号,也就是gsx的用户总数。通过定时检测总数,可以得知某个时间段内,新增的用户数量。灰熊再根据一些简单的判断(一样的简介、有规律的头像等),也可知道这些新增的用户中有多少是假用户。

有人质疑,这段数年前的代码是否已经失效?从我的理解来看,没有。因为内部编号->用户id这样的对应关系,如果失效,那么是不可能反推出大量的有效用户id的。从灰熊的报告来看,所有推测出来的用户id对应的profile都是可访问的。

3)购买大量wechat号

这个没啥好说的,懂的都懂,不予讨论。

总的来说,这份报告真的非常厚重,其专业程度和可靠性不亚于浑水做空lk的那次示范级报告。与之前的做空报告有着本质的区别:因为这次的数据是来自与gsx内部,不再是推测臆断。也攻击了gsx飞速增长中的两个核心:收入增长和用户增长。

当然,不排除报告和事实有所差异,可能是灰熊管中窥豹,我们十分期待gsx官方的回复。

精彩讨论

daftme2020-06-03 15:16

类比一下浑水做空lk的那份报告:enrollment_count就好像是浑水派人搜集小票;而利用旧员工的源代码,通过user_id来巧妙统计用户数量增长,就好像是浑水潜伏在lk的店长群里发现小票号跳号的秘密。不得不说,机构们调查的思路其实是万变不离其宗的。

7只猫2020-06-03 14:51

我也简单试了一下API1。灰熊报告里的那个课程网页链接,早上还有8000多enrolled count,现在是0。真有趣

周黎安2020-06-03 16:47

将载入整个金融史的造假,无论是涉及的金额(百亿美金)、造假的方式(AI机器人)、做空的程度(9份做空报告)和跨度(3个月连续被做空)、涉及的承销商(摩根/瑞信/巴克莱/德银)等等....这都是不亚于美股熔断的大事件啊!!

终究做不了价投2020-06-03 14:57

我非常好奇灰熊怎么找到这段老代码的,莫非有高人指点?

daftme2020-06-03 14:50

你是不是看不懂原版报告,只知道拾人牙慧?这份报告当然没忘记gaotu,只是我统一由gsx代替了,因为我讨论的是技术细节。这份报告中专门讲了gaotu的相关数据,还解释了“why Gaotu is so important”。

全部讨论

2020-06-05 20:51

这个研究非常可靠,为什么他能一直拉…

2020-06-03 21:44

真的牛!拿稳空单!

2020-06-03 16:46

好文!

2020-06-03 15:43

30个亿差不多4亿美金

2020-06-03 15:34

评论里bs真多

2020-06-03 15:05

拉总这次直接不回应灰熊的enrolled_count问题了,玩起了转移话题大法

2020-06-03 14:51

目前为止回应的都是在小范围驳斥式的回应 这次的报告数据证据确凿 恐怕直接装瞎了

退一步讲,就算用户数完全造假,你也解释不了跟谁学账上30亿现金从何而来....这样的造假太过完美,真要实现的话代价太高。