Abraham Wald — 数弹孔的数学大师

亚伯拉罕·瓦尔德(Abraham Wald,1902 – 1950)是罗马尼亚裔美国统计学家,1902 年 10 月 31 日生于罗马尼亚克卢日的一个正统犹太世家。瓦尔德先就读于克罗日大学,1927 年进入入维也纳大学学习并且很快就获得博士学位(1931年)。瓦尔德的求学生涯恰好赶在第一次世界大战和第二次世界大战之间。在这个时期的奥地利,由于政治上的因素使他无法从事学术工作,瓦尔德只好接受一个私人职位,职责是帮助一位银行家增加高等数学知识,这导致他对经济学产生了浓厚兴趣,后来他成为经济学家摩根斯坦 (Oskar Morgenstern) 的亲信助理。

瓦尔德在二次大战前到达美国(1938年),不幸的是他的父母和姐妹没有逃出来,最终都死于纳粹的瓦斯房。瓦尔德在哥伦比亚大学做统计推断理论方面的研究工作,写出了许多有开创性的学术论文。他于 1943 年任副教授,1944 年任正教授,1946 年被任命为数理统计系的执行官员。在第二次世界大战的大部分时间里,瓦尔德在哥伦比亚大学的统计研究小组里面工作。该研究小组是为了二战而服务的,只不过研究的内容不是各种各样的炸药,而是各式各样的数学问题。

瓦尔德所在的统计研究小组每周都从事着高强度的学术研究活动,但瓦尔德在从事学术研究的时候,由于身份的原因,美国军方会禁止他阅读他自己完成的机密报告。传闻,每次瓦尔德在撰写完一页机密报告,旁边的秘书就会拿走这一页,并且不让瓦尔德重新阅读这份资料。虽然数学研究存在着不少的客观困难,但是,这并不影响瓦尔德的工作热情和尽情地展现自己的聪明才智。

在二战的时候,瓦尔德解决了一个关于飞机装甲的问题,让他从诸多数学家中脱颖而出。这个问题是美国军方提出的,从美国军方的角度来讲,我们都不希望自己的战斗机被敌人击落,因此我们需要为战斗机加厚装甲。但是,增加装甲又会增加战斗机的质量,影响飞机的机动性,并且还会消耗更多的燃油。过多的防御是没有必要的,但是完全不防御则是更加不可取的。那么究竟在飞机的哪些部位增加装甲,能够做到增加防御,但是又不影响飞机的战斗效率呢?军方就把这一问题交给了统计研究小组。

为了给数学家和统计学家们构建理论基础,军方为他们提供了一些可能需要的数据。军方收集了己方战斗机与敌方战斗机交火之后返回基地的数据,己方的战斗机身上都会留下许多弹孔,但是这些弹孔的分布并不是均匀的,机身上的弹孔比引擎上的弹孔明显多很多。

飞机部位每平方英尺的平均弹孔数
引擎1.11
机身1.73
油料系统1.55
其余部位1.80

这张表就是军方得到的统计数据,从表格上看,军方领导一致认为,装甲应该装在飞机最需要保护和受攻击最高的部分,那么就应该装在机身上,因为机身平均弹孔数是最多的。但是,统计学家瓦尔德给出的答案却与他们的答案相差甚远。

瓦尔德说,需要加装装甲的地方并不是留有弹孔的部位,而是没有弹孔的地方或者弹孔数较少的地方,那就是飞机的引擎。为此,瓦尔德继续解释道,飞机各个部位受到损坏的概率应该是一样的,但是引擎的弹孔数明显比其余部分少,那么这些失踪的子弹和弹孔去哪里了呢?原因只有一个,那就是这些弹孔应该都在那些未能返航的飞机上。胜利返航的飞机引擎弹孔较少,其原因正是被击中引擎的飞机未能返航。大量飞机在机身被打击的情况下仍然能够回到基地,说明机身可以承受很大的打击,于是无需加装装甲。

考虑一个极端的例子,假设敌军只要击中飞机引擎,飞机就会坠落且无法返航,那么我们会得到什么样的数据呢?我们会发现,在返航的战斗机上,机身,油料系统,其余部分均有弹孔,但是引擎上面找不到任何弹孔。那么只有两个可能,第一敌军打中了飞机的各个部位,但是没有打中引擎;第二就是打中引擎的飞机无法返航。

最终,沃尔德的论文题目是:A Method of Estimating Plane Vulnerability Based on Damage of Survivors,翻译出来就是一种根据幸存飞机损伤情况推测飞机要害部位的方法。在论文中,他应用详细的数据来证明他自己的观点。弹孔最稀疏处就是战斗机的要害处,因为没有被击中要害处的飞机才有更多的机会返航,进入军方的统计样本。这就是幸存者偏差。

通过详细的数学论证和统计推断,这一数学结论最终说服了军队的高层领导,军队高层领导迅速将瓦尔德的建议进行实践。瓦尔德拥有的空战知识和部队实战都不如军官,为什么却能够看到这个问题的本质原因呢?根本原因是瓦尔德在长期的科研过程中所养成的习惯。在这个例子中,军官们默认了一个假设,那就是返航的飞机是所有飞机的随机样本。正是这一个幸存者偏差的假设,导致军官们得到了错误的结论。

关于幸存者偏差(survivorship bias),有不少有趣的笑话。例如:老师在课堂上点名,要求没有到的学生举手,结果无一人举手,然后就得到了全体学生都来上课的结论。又例如:记者在春运火车上采访群众,问今年的火车票是否容易买,群众说很快就买到了,其实真正的原因是没有票的人无法上车。

但是数学家瓦尔德的结局令人惋惜。1950 年,四十八岁的他受印度政府邀请,携妻前往印度讲学。不料航行至印度的尼尔吉里丘陵时,飞机坠毁,沃尔德和妻子都未能成为幸存者。

随感(十八)— 经营自己的职业生涯就是经营一家企业

在《软技能:代码之外的生存指南》中,作者在全书的开始就抛出了一个观点:“经营自己的职业生涯就是经营一家企业”。

每个程序员在刚开始工作的时候,如果一头扎入撰写代码的世界,根本不管外部环境的事情,那就跟中世纪的铁匠和纺织工没有任何区别。每个公司就好比当年的铁匠铺或者纺织厂,通过招募程序员或者产品经理来赚钱。产品经理能管理提供的服务就是调研行业,设计产品功能等;程序员能够提供的服务就是撰写程序,完成产品功能等。从打工者的角度来看,每个打工者只需要完成企业或者直系上级传达的任务和目标就可以,然后通过劳动来获取相应的薪水,但这是一个打工人的心态,仅仅完成这些事情是无法让自己的职业生涯获得更大成功的。

在日常的生活工作中,打工人最好是树立一种为自己工作的理念。从一个打工者的心态转化成经营一个企业的目标,该个人经营的企业能够提供的服务包括“软件开发”,“数据分析”,“品牌营销”等内容。如果是为了自己而工作,那么在工作中所获得的技能和生意都是自己的,离开了这个公司或者行业还有机会东山再起。

经营一个企业,肯定离不开营销和推广。同理,如果是像企业一样的经营自己的职业生涯,就会一定要进行自我营销和影响力的扩大。并且在平时的工作和生活中,个人通过一些自媒体或者社交平台来进行必要的自我营销也是提升个人竞争力,个人影响力,个人魅力,甚至提升薪水的一种方法。

现在的社交媒体远比几十年前发达很多,以前只有纸质版的传播渠道,现在通过互联网和社交平台,再小的个体都可以做成一个独一无二的品牌。对于个人职场生涯而言,个人品牌的塑造并不是一朝一夕的事情,而是一个长期坚持不懈的工作。在互联网数十年的发展历史中,每个独立的个体都有机会成为某一个垂直领域的专家和代表。在国内,自我营销的方式有很多种,常见的包括但不限于:

  • 博客:搭建属于自己的博客,微信公众号,知乎专栏等;
  • 视频:无论是 YouTube 长视频,bilibili 的中视频,还是抖音快手的短视频均可;
  • GitHub:是程序员进行自我宣传的最佳平台;
  • 书籍:撰写书籍有助于在大众面前提升曝光;
  • 技术会议:能够参加各种各样的技术会议有助于提升个人影响力。

如果个人塑造的品牌有一定的影响力,那么就有机会让其他公司和客户主动上门购买所需要的产品和服务,并不需要一个又一个的追逐其他公司和客户。其实这与在公司打工是类似的,如果该程序员的在行业中的影响力很大,那么总会有其他公司和团队来挖墙脚。如果个人品牌有很高的竞争力,就会创造出各种各样的机会。

为了打造个人品牌,就需要设定各种各样的目标,这与在公司设定 OKR 或者 KPI 是类似的,需要进行目标的拆解。先制定一个大目标,然后将该大目标拆解成小目标,再将这些小目标分配给每个部门,最后分配到每个职场人的身上。对于经营个人品牌而言,也需要设置一个与自己目标,理想,职业生涯相对一致的目标,然后把这个大目标拆分成若干的小目标,例如:季度目标,月目标,周目标,日目标。把大目标拆解成一个又一个可以完成的小目标,这样有助于经常回顾自己的工作计划和最终目标。

也许在个人的职业发展中,有的人会觉得自己并不是所谓的专家,或者尚未成为该领域的领头羊,可以营销和传播的点相对较少。但这并不是放弃自我营销和扩大影响力的借口,每个人在每个阶段看待问题的方法和角度是不一样的。初学者看待问题是一个角度,专家看待这个问题则是另外一个角度。每个角度都是可以进行自我营销和推广的,无论是初学者还是专家,都有机会在从传播自身品牌中获益。

在从事自由职业者或者副业的时候,要同时兼顾个人创作和产出的质量,效率,成本。质量太差的话,读者和其他客户就会对品牌产生质疑;效率太低的话,个人也无法完成当初所制定的大目标;成本过高的话,那么做这件事情就是得不偿失的。

而在做自我营销的过程中,除了自身要有一定的知识储备对外宣传之外,更重要的则是坚持不懈地做某件事情。坚持做一件事情的难度是远高于心血来潮做事情的。在做程序员的时候,最重要的就是生产力,拥有优秀的生产力可以大量提升效率,也可以提升收入。为了获得更高的生产力,每日/每周/每月的计划就需要提前安排。通过各种 Calendar 日历工具提前安排自己的工作,基于 Rescue Time 等时间管理工具来安排有效的工作时间。培养一个好习惯有助于经营自己。为了达到长期坚持做某件事情,就一定需要形成惯例,类似于每天早上起床之后就会刷牙一样。而生产力的秘诀就是长期坚持做一件小事。通过形成惯例,有助于塑造一个健康向上的生活,可以进一步地提升生活质量。

在不同的自我营销平台上,由于观众是略有差异的,因此在内容侧需要进行必要的调整和重组,以迎合更多观众的喜好。坚持不懈地做某件事情也有利于在社交平台保证稳定的活跃度,可以长期的获得必要的流量。在现有的互联网环境下,有流量就可以带货,做培训,开直播,甚至提供必要的收入来源。《软技能》的作者在有段时间内进行了“艰苦工作”的模式,不仅完成自己的日常工作,还在工作日晚上和周末制作在线课程,且每周更新自己的博客内容。在持续工作的过程中,作者开始拥有了源源不断的被动收入,不仅包括博客的收入,还包括一些 APP 的收入,甚至投入的房地产和股票也获得了不错的收益。

在获得成功的路上,每个人都愿意在自己的舒适区呆着,很难主动地走出自己的舒适区,毕竟万事开头难。一旦走出了舒适区,就有可能给个人带来一个全新的世界。

无处不在的数学 — 从疫情谈起

数学在生活中是无处不在的。

每个人从出生开始,都会跟数学打交道。从最开始的认数字,到加减乘除,方程,几何,再到微积分和线性代数,数学几乎贯穿了教育的所有阶段。但是,数学真的在生活中是无处不在的么?对于这个问题,不同的人肯定有着自己完全不同的见解,本文就从近些年最常见的疫情开始谈起吧。

从 2019 年末开始,新冠病毒就开始在社会上悄悄传播,医疗系统开始逐渐被占满。2020 年初,武汉的疫情已经处于比较严重的状态,不少人都去医院治疗疾病,但同时检测系统和治疗系统还没有完全跟上。当时并没有办法在短时间内对几百万甚至上千万人口进行快速的疫情检测,只能够采取封城的策略来应对当时的疫情。

到了 2022 年,很多城市都有了丰富的应对疫情的策略,可以在很短的时间内对几百万甚至上千万人口同时进行核酸检测。根据检测结果,防疫部门就可以进行精准防控,以避免疫情的进一步扩散。能够进行大规模的核酸检测,除了检测能力本身的提升,检测时间的缩短之外,有没有数学办法将其进行优化就是一个关键问题。

核酸检测,其目的就是从大量的人中找到有问题的那一批人,然后进行必要的医疗救治,防止病毒的进一步扩散。近期如果做过大规模核酸的朋友仔细观察的话,其实在检测的时候会将十个人或者多个人的样本进行混合,放入同一个试管中,最终一起对这十个人或者多个人进行检测。如果有问题的话,再去对这十个人进行单独检测。从直觉上讲,多个人混合检测的效率肯定是优于一个人单独检测的,那么其背后的数学依据究竟是什么呢?为什么不进行二十个人,三十个人,一百个人的混合检测呢?

在回答这个问题之前,我们可以看一个更加简单一点的案例。相比大家都知道高校的图书馆,在图书馆的门口都会放有闸机,其目的是防止图书馆的书籍被大家不小心带出去。如果有人不小心把图书馆的书籍放入闸机,那么闸机就会报警。通常情况下,大家去借书的时候都会同时借阅好几本甚至十几本书籍,如果此时有一本书没有借阅成功,而出现了闸机报警的情况,那么如何快速的找到没有借阅成功的那本书呢?

最直接的方式是一本一本将这些书籍进行扫描,然后如果出现了报警,那就找到了这本没有借阅成功的书籍。但这种扫描的方式无疑是效率最低的,如果每次都要扫描所有的书籍,那么图书馆的管理员都会觉得效率低下。

假设某个同学一次借阅了十六本书,但是有一本书没有借阅成功,其实完全可以使用“二分法”来解决问题。将这十六本书分成两份,每一份有八本书,第一次先测试其中的八本,第二次再测试剩下的八本,于是得到了有报警的那八本书;于是再将这八本书分成两份,每份四本,重新在闸机上进行测试,得到有报警的那四本书;再将这四本书分成两份,每份二本,同样的操作之后得到有问题的两本书。最后,将这两本书在闸机上测试,就得到了那本没有扫码成功的书籍。通过这样的方法,可以将检测次数变成 2 + 2 + 2 + 2 = 8 次,测试的次数变成了原来的一半。扩展到一般的形式,如果书籍有 2^n 本,那么一本一本检测的话需要 2^n 次,但是如果使用图书馆阿姨的方法,则可以将检测次数变成 2n 次;当 n 很大的时候,可以清楚地知道 2n \ll 2^n,其检测的次数会呈现明显的减少。

不巧的是,这个方案并不能够完全照搬在传染病的检测中。因为在图书馆这个场景中,我们已经假设只有一本书是没有扫码成功的;但是在现实生活的传染病检测中,患病者的数量肯定不止一个,同时有多少个患病者其实也是未知的,我们只是知道患病者的人数肯定远远小于城市的总人口数。而在图书馆检测中,可以通过一次扫描就得到多本书的结果,在核酸检测的时候其实是做不到这一点的。不过图书馆这个场景倒是给提供了一个有效地思路,那就是将所有的书籍进行分桶。所谓的分桶就是将一个全体分成多份,且每一份的样本数是一致的,每次检测的时候只需要同时检测每一份样本就可以知道一个整体的情况了。

不过,核酸检测可以转换成一个抽象的数学问题。假设城市 A 的人口数是 n,当前感染传染病的人数是 m,并且 m 是远小于 n 的(m \ll n)。令 p = m / n 表示患病率且 p < 0.01。为了减少检测量,检测人员想对人群进行分桶操作,每 k 个人的样本进行混合,并且对这个混合样本进行检测。如果该混合样本没有问题,则这 k 个人都没有问题;如果该混合样本有问题,则再次对这 k 个人进行逐一检测。通过这样的方法,就可以得到最终的结果。那么,这个 k 该如何选择呢?

k = 1 的时候就相当于对每个人都进行检测,k = n 的时候就相当于对城市 A 中所有的人都进行检测,这两种极端情况的效率都很低。那么 k 值究竟如何选择,才能够让每个人的平均检测次数最少呢?

在数学上,这种混合检测的方法叫做 Group Testing,最早是美国的统计学家 Robert Dorfman 在 1943 年提出的。这种方法可以非常有效地提升大规模检测的效率和能力。在成本有限的前提下,达到最优的效果。其中心思想就跟核酸检测的方法是一样的,将全体人群按照一定的数量分成多个组,然后对每一个分组进行检测,如果该分组的检测结果没有问题,则这个分组里面的人就没有问题;如果该分组的检测结果有问题,则将这个分组里面的所有人重新进行单独测试。

根据以上方法,每个人的检测次数有可能是 1 次,也有可能是 2 次。只要这个人所在的混合样本没有问题,那么这个人就是 1 次;如果这个人所在的混合样本有问题,那么这个人就需要检测 2 次,那么这 k 个人都需要重新检测 1 次,这 k 个人的总检测次数就是 k + 1。这 k 个人的混合样本没有问题的概率是 (1-p)^k,有问题的概率是 1-(1-p)^{k}。那么,这 k 个人总检测次数的期望值就是 (1-p)^{k}+(1+k)(1-(1-p)^{k})。由于城市 A 总共有 n 个人,那么就需要 n / k 个桶,因此,总检测次数的期望是 \frac{n}{k}\cdot {(1-p)^{k}+(1+k)(1-(1-p)^{k})}=n\cdot\bigg(1+\frac{1}{k}-(1-p)^{k}\bigg)

为了解决这个函数的极值问题,最常见的就是使用微积分的方法。当 p < 0.01 时,通过 Taylor 公式可以得到 (1-p)^{k}\approx 1-pk,因此,总检测次数的期望值约等于 n\cdot\bigg(\frac{1}{k}+pk\bigg) 。当k=\frac{1}{\sqrt{p}} 时,上述公式达到最小值 2\cdot \sqrt{p}\cdot n。如果 p=0.01 时,k 取 10 可以达到最小值 0.2\cdot n;当 p=0.001 时,k 取 32 可以达到最小值 0.06\cdot n。通过混合采样的方法,可以将总检测次数的期望变成原来的五分之一甚至十分之一以下。

那么,在什么条件下,混合采样的方法会优于逐一检测呢?

此时,总检测次数的期望就要小于逐一检测,用数学公式来描述就是:n\cdot\bigg(1+\frac{1}{k}-(1-p)^{k}\bigg)<n,化简之后得到 p<1-\frac{1}{\sqrt[k]{k}}

如果进行十混一的混合检测方法,也就是当 k = 10 时,需要保证 p < 0.2;如果要进行二十混一的混合检测方法,也就是当 k = 20 时,需要保证 p < 0.14;如果要进行五十混一的混合检测方法,也就是当 k = 50 时,需要保证 p < 0.08。在绝大多数情况下,感染率 p 还是会小于 0.2 的,因此采用十混一或者二十混一的方法在现实生活中是可靠的。

在疫情防控的过程中,核酸检测是可以做到降本增效的,而降本增效的背后并不是拍脑袋的决定,其背后有着数学的理论支持。

参考资料

1. 参考知乎文章:https://zhuanlan.zhihu.com/p/103974270

2. 参考知乎提问:https://www.zhihu.com/question/524417189,https://www.zhihu.com/question/523901192/answer/2442100447

3. 核酸检测数学模型:https://www.zhihu.com/zvideo/1495452303112572928

4. 核酸检测的真假性:https://zhuanlan.zhihu.com/p/452598672,Bayes 公式。

5. https://en.wikipedia.org/wiki/Group_testing

6. https://zhuanlan.zhihu.com/p/104645873

随感(十七)— 职业生涯这件事

由于工作和生活的原因,笔者的个人博客和其他自媒体频道在几个月内都没有做太多的更新,但近期又有了一些相对富余的时间,觉得还是有必要把技术和个人博客捡回来,也算是对个人生活和工作的一个总结。

笔者一直在互联网公司工作,近期听到得最多的就是 XX 公司裁员,ZZ 公司大面积优化员工,民企和外企都在进行大规模的无差别裁员等。在前几年比较好的经济环境下,互联网公司每年会进行几次考核,并且会有一定的比例低绩效考核,最后这些人有可能会被裁员,比例大约也就是 10% 或者 15%,一般情况下不会超过 20%。

如果是部门或者小组拿到了裁员超过 20% 这个比例的指标,那么就不仅仅是低绩效员工的问题了,因为低绩效员工的比例其实并不会那么高。这个比例说明处于平均水平的员工已经有可能上了裁员名单,一旦超过 50% 的话,甚至某些高绩效的员工也在这份裁员名单上。这样的调整有可能是因为公司的发展问题,也有可能是整体行业的发展前景受阻。大面积的裁员跟之前的末位淘汰制是不太一样的。

如果是在互联网公司工作的话,有些同事确实是满足以下一个或者几个条件的:

  • 配偶是全职在家;
  • 家里有1-2个小孩;
  • 有20-30年的房贷;

如果互联网公司发展好,房价也在涨,那么这些条件其实都不是问题,通过工资,股票,年终奖其实都能够搞定这些事情。但是一旦行业发展不达预期,公司出现了长时间的亏损,那么就有可能出现裁员的情况。对于某个人而言,如果突然被公司裁员,那么这个月或者下个月的收入就会大幅减少,但是家庭的开销还是固定的。此刻,这个人的压力就会迅速增大。对于配偶全职在家的情形,这个家庭的收入就会骤降。所以在这个经济环境下,对于普通家庭而言,配偶全职在家风险还是太大,无论钱多钱少,家里面的每个人都还是需要找到一个赚钱的方法;如果家里的顶梁柱失业了,小孩的生活水平也会相对降低;当然,在上述三个条件下,最大的问题应该还是长期的房屋贷款。

如果某个员工在公司突然被裁员,一般情况下都会有一定的赔偿金,如果再加上个人之前的存款可以延续一段时间低收入甚至无收入的生活。所以在有工作的情况下,每个人都进行积极地存款理财投资是优于月光和过度消费的。在经济发展好的时候,个人即使贷款多一些也是有信心还上的;在经济下行的时候,个人就要尽量减少贷款和负债。因此,在日常生活中,大家也尽量避免月光和进行一些不必要的消费,能存钱的时候还是尽量存一些。通常个人能够背负的大的贷款就是房贷,如果每个月的还款金额大于税后收入的话,在失业的情况下确实会造成过大的压力。

在大公司内部每个人都有着自己的工作职责,有程序员,产品经理,运营等诸多岗位。如果能够基于现有的一些工作技能来开展副业,那么对于个人而言就是一个 Plan B。但是副业是需要长期日常积累的,并不是临时一两个月就可以完全搞得起来的。如果在日常工作生活中有条件的话,大家可以想办法搞一个或者多个副业,一开始并不需要盈利,但只要坚持下去和方法得当,就有可能成为一个盈利的工作,甚至未来可以通过它来养家糊口。Plan B 如何选择完全基于自身的具体情况,毕竟每个人所擅长的领域也是完全不同的。

对于互联网大厂的在职人士而言,平时也不要长期处于一个相对舒服的位置,能够保持上进心是很重要的。除了日常地看技术资料和论文提升自己之外,时不时地也去市场上看看机会,有合适甚至更好的机会也可以缓一缓。毕竟没有哪个公司是长期稳定的,每个公司的情况都是会随着市场变化而变化的。在突然失业的情况下,尽量保持一个良好和积极的心态去寻找市场的机会,在市场环境一般的情况下也需要适当地降低一下薪水和预期。

长期来看,如果该员工手上有一些现金,即使突然被公司裁员了,那短期内该员工确实不会特别慌,只需要拿着赔偿金积极寻找下家就行了。如果个人手上的现金特别少,还同时满足配偶是全职在家,家里有1-2个小孩,背负了20-30年的房屋贷款的条件,在每个月都在月光的情况下,在突然听到被裁员的通知时就会压力陡增。但是,条条大路通罗马,总有一个可以回旋的余地,往后积极地工作和生活吧。

随笔(十六)— 互联网的寒冬

Shopee

在 2022 年 9 月 19 日周一上班的时候,笔者在社交媒体上听到了各种关于 Shopee 深圳地区裁员的消息,其中包括以下几个内容:

  • Shopee 进行大裁员,深圳地区是重灾区之一;
  • 上午开完全员大会,下午就直接交电脑走人,连工作都不用交接;
  • 无论是社招员工还是校招员工,在这一波裁员中均受到了不同程度的影响;
  • 中午 12:00 HR 找在职员工聊天,下午就直接签字让员工走人,内部聊天工具 SeaTalk 不再能登录;
  • 大厦保安在上周五提前开会,要预防周一(20220919)有人做不必要的事情,产生意外。

各种各样的八卦消息当时在脉脉上传得到处都是,Shopee 的员工被裁了之后就迅速搭建了 Shopee 的离职群进行互助。离职群里面也有其他公司的朋友或者 HR,会把一些招聘信息发在群里面,供 Shopee 的候选人进行选择。

从 2021 年开始,Shopee 进行了很大程度的扩张,深圳地区的不少互联网从业者都在 Shopee 这家外企工作,可以做到 Work Life Balance。Shopee 对应届生的 Base 也开到了 25 K,折算一下基本上每年可以拿到 40 万甚至更高的数目。在 2022 年上半年,Shopee 也在不断地招人。直到 2022 年 8 月底公布财报数据之后,Shopee 的业绩一落千丈,后来 9 月份就开始了史无前例的大裁员计划。

2021 年的 Shopee 校招 Offer

从赔偿程度来看,很多人都可以拿到 N + 2 的赔偿,但是由于很多人是应届生或者刚刚进入 Shopee 一年的员工,N + 2 的赔偿甚至优于 2N 的赔偿。

2022 年,国内互联网的情况貌似就在起变化,很多互联网公司都在逐步缩减人数,甚至大厂也是在减少在职员工人数,减少员工福利。在 2022 年上半年还在大规模招聘的貌似只有字节跳动和 Shopee,但是 Shopee 在 2022 年 9 月也进行了史无前例的大裁员,很多刚进入 Shopee 的员工都被迫走人,其中不乏 2022 届刚毕业的应届生。

在 Shopee 的离职群里面,可以看到其他公司的部分招聘信息,但也就是阿里的Lazada,字节,拼多多,小红书而已,说明其他的公司可能暂时没有大规模的招聘计划。就算有社会招聘,那基本上还是很小的规模,一个萝卜一个坑而已。

Shopee 离职群的岗位招聘

Shopee 的裁员不局限于国内,甚至新加坡的办公室也进行了裁员的操作。在新加坡的联合早报上,有博士生刚飞到新加坡,就被 Shopee 通知了裁员,当场失业。

联合早报的新闻

在脉脉上,也有来自新加坡国立大学(NUS)的 Master 刚刚毕业入职 Sea 之后三天就立刻失业,连签证都出现了问题。

来自脉脉

在一些微信公众号上,Shopee 的母公司 Sea 也有员工表示正在进行裁员计划。Gerena 团队也进行了裁员,在新加坡工作的小伙伴也在积极地找下家。

来自微信公众号

除了 Shopee 之外,国内的一些互联网公司也对刚工作了一年的应届生进行了部分裁员。对这一块如果有兴趣的话,读者可以去脉脉上面浏览一下,感觉并不是一两家公司的事情,可能是互联网行业真的进入了寒冬。

从股票上看,腾讯,阿里,Shopee等大公司的股价也是一路下跌,有的互联网公司股价甚至跌破当年的发行价。随着各大互联网公司的股价都在走低,互联网公司的 2022 年招聘也会更加谨慎。对于普通员工而言,好一点的公司是不裁员,然后走一个才能够进一个。坏的情况就是公司直接进行裁员,从而降低运营成本。

过去各大互联网公司吸收了很多的人才,但是在 2022 年一次性把这批人推向市场势必会造成市场的混乱,导致很多候选人只能够降薪找工作。对于应届生而言就会显得更惨一点,很多应届生才刚刚开始工作几天就失业,从校园招聘变成了社会招聘,直接丢失了应届生的身份,要面临和社会人员同样的竞争环境。

前几年寒冬还未必来临,但是这次寒冬可能真的来了。

强化学习的入门方法

强化学习是人工智能领域一个非常重要的分支,在游戏 AI 领域的应用是无处不在的,包括大家耳熟能详的 AlphaGo 和王者荣耀,其背后都使用了大量的强化学习方法。随着人工智能技术在互联网公司的日渐普及,人们对人工智能的期待也越来越高,也期待着人工智能未来能够做更多的事情。除了各种门禁系统,人脸识别系统在各个公司的应用之外,在游戏领域,强化学习也扮演着举足轻重的作用。

当前的强化学习技术除了使用在游戏 AI 领域之外,也在机器人控制,推荐系统等领域有着很多应用,也取得了不少商业价值。但强化学习的学习还是存在一定的门槛,除了一些在线的 tutorial 和零零散散的资料之外,其实还是需要一本相对完整和优秀的教材来辅助高校的老师和学生,只有这样,强化学习才能够成为一门课进入高校课堂。

上海交大的强化学习团队教师张伟楠,沈键,俞勇合力撰写了一本关于强化学习的,理论与实践相结合的书籍《动手学强化学习》。本书的每个章节除了必要的理论介绍,公式推导之外,还包含了相关的 Python Notebook。Notebook 中包含了算法过程和可运行代码,方便读者阅读相关内容并立刻进行实践。

《动手学强化学习》

《动手学强化学习》是一本相对完整的书籍,读者并不需要知道太多的预备知识就可以直接上手这门课。本书包括三个部分:

  • 第一部分:强化学习基础;
  • 第二部分:强化学习进阶;
  • 第三部分:强化学习前沿。

在第一部分,作者们介绍了强化学习的基本原理,多臂老虎机,马尔可夫决策过程,动态规划算法等内容;在第二部分,作者介绍了 DQN 算法及其改进算法,策略梯度算法,Actor-Critic 算法等诸多算法,让作者能够在第一部分的基础上更进一步的理解强化学习;在第三部分,作者们撰写了前沿的强化学习算法,包括离线强化学习,多智能体强化学习等内容,让读者在之前的基础上迅速进入到强化学习的前沿领域。

本书的另外一个亮点就是 Python Notebook 的代码丰富完善,读者可以一边阅读强化学习的基础知识,一边进行代码的开发工作。基于理论和实战相结合的办法,读者可以尽快掌握强化学习的实战方法。学习这本书需要读者有一定的 Python 开发基础,并且这本书有相应的强化学习视频,方便读者尽快掌握这本书。

随笔(十五)— 谈一谈校招简历的那些事

校园招聘是应届生从学校走向职场的重要一环,对于大多数应届生而言,能够找到一份理想的岗位,对未来的职业发展和个人成长都有很大的帮助。最近无意之中翻到了当年自己校招的简历,从现在的角度来看,基本上属于一轮游的简历,可能连初筛都不一定能够通过。如果想要在校园招聘中找到一份不错的工作,一定要在本科和硕士期间进行必要的积累,毕竟只有日积月累的获取经验,才有可能在校招的竞争中脱颖而出。

由于自己是从数学系转行到机器学习领域,所以下面谈的简历基本上还是以互联网的机器学习和人工智能的方向为主,至于产品,市场等其他岗位,可以关注其他博主的资料。不同方向的岗位,在撰写简历方面其实相差还是比较大的。

如果要写简历的话,通常会选择使用一些招聘网站的在线撰写简历的功能,或者直接使用 word 的模板来进行编写,甚至使用 LaTex 中的 ModernCV 模板。下面就是 LaTex 中的 ModernCV 模板所生成的简历。

ModernCV

一般情况下,对于应届生的校园招聘而言,简历会包括以下几个常见的内容:

  1. 个人简介:姓名,性别,年龄,联系方式等;
  2. 教育经历:本科/硕士/博士学位,博士后(工作经历);
  3. 实习经历:大中小公司的实习经历;
  4. 科研经历:本科/硕士/博士所在实验室的项目;
  5. 比赛成绩:ACM,Kaggle,数学建模,大学生数学竞赛等比赛成绩;
  6. 其他条件:编程技能,Office,英语成绩(四六级,托福,雅思等);

基本上所有的招聘都是候选人之间的横向比较,因此想要拿到不错的 offer 就一定要在候选人之间脱颖而出才行。下面基于以上六点分别来分别介绍一下。

个人简介

个人简介这一块对绝大多数而言都没有问题,只要是想找工作的人都会认真写这一块,只看这一块其实大家都不会有太大的差异性。

教育经历

从教育经历这一块来看,就开始有区分度了。不同的学历的面试标准和要求是存在一定差异性的,不同的学校也是存在一定的区分度的。当然学校的区分度并不是指 Top 2,C9,985,211 的学生就一定会通过面试,在面试的过程中,任何学校的候选人都存在机会。不同公司的不同部门会根据自身的实际情况招聘最合适的候选人,并且最合适的候选人并不是最强的人。

在招聘的时候,不同的部门有着完全不同的招聘需求,有的部门需要 CV 方向的人才,有的需要 NLP 方向的候选人,有的则需要机器学习和强化学习方面的博士大咖。如果将 CV 的候选人推送到一个机器学习岗位,那明显是不合适的,该岗位的面试官很有可能会直接放弃这份简历,理由就是岗位不匹配。甚至,在同一个岗位上,也会略有差异,毕竟每个候选人的经历和条件还是不太一样的。

在留学申请学校的时候,也会存在某些极其优秀的候选人拿不到一些学校 offer 的情况,此刻就有一种说法叫做“overqualified”。意思就是候选人的能力明显高出许多,就算该学校发出了 offer,这位候选人也存在极大的可能不来,所以宁可直接发出拒绝信。在招聘的时候其实也是这样的,不同的岗位有着完全不同的定位,如果面试官判断这位候选人即使拿到了 offer 也存在不会接 offer 的可能性,那么即使候选人能力再强,也有可能直接发出拒绝信。

实习经历

从实习经历来看,这一块在所有候选人中的区分度是最大的。有的候选人在大学期间就早早出来实习,个人简历上至少有三到五个实习经历,每个实习期间从 2 个月到 1 年不等,并且都是国内或者国外的大型互联网公司实习经历。实习的项目经历非常丰富,在面试期间就可以基于自己的项目侃侃而谈,相比之下,没有实习经历的候选人在这一块就会占据劣势。

从个人的发展而言,如果有条件实习,那还是请尽快实习,毕竟时间不等人,而且实习的机会也是非常有限的。在实习期间,能进大公司实习就果断去大公司实习,实在不行的话从小公司开始实习也是可以的,有一个甚至多个实习经历对未来的求职会好很多。

如果想实习的话,那么实习的工作时间最好长一点,一般建议三个月至半年甚至一年以上。毕竟两个月的实习真的学不到什么东西,还容易给正式员工挖坑。实习的第一个月,能够掌握公司的常用开发工具和平台就已经算不错了。实习的第二个月能够做简单的数据分析和算法开发工作。如果实习两个月就走了,那么对现有团队的帮助其实非常有限。从正式员工的角度来看,两个月的实习生基本上做不了任何工作,虽然为社会培养人才很重要,但是也要避免由于实习生的跑路导致项目受到重大影响。从项目开发和迭代的角度来讲,新手写的代码会很坑,迟早也要推翻重写,甚至还不如从一开始就不要写。

科研经历

科研经历这一块也有区分度,不同的导师能够给学生带来的资源完全是不一样的。有的导师跟业界联系紧密,培养出来的学生基本上可以拿到各大公司的大咖岗位。相反地,有的导师连机器学习都没搞清楚是啥就让学生搞科研了。学生在选择自己导师的时候,对于导师的背景可以先调研清楚,避免入坑了之后耽误自身前途。

如果导师所做的项目是公司实际业务与科研相结合的,那这就是最合适的导师。首先,基于导师接到的公司业务,可以拿到公司的部分数据;其次,基于这些数据,学生可以做相应的科研,甚至发表论文。不仅有实战的经验,也会有相关的论文产出。对学生未来求职相关岗位有很大的帮助,如果导师更加靠谱一点,能够在工业界大力推荐学生,那么学生求职就会顺风顺水了。

比赛成绩

不同的比赛区分度其实很大,有的比赛具有很高的含金量,但是有的比赛就非常水。对于不方便参加实习的学生,日常参加比赛也是非常有必要的,否则简历就会更加空洞了。但是,如果个人简历中只有一些 kaggle 比赛,或许这份简历在 2015 年是够用的,但是在 2022 年就大概率不够用了。因为很多的候选人都会有相关的比赛经历,很难从中脱颖而出。

其他条件

其他条件包括编程技能,Office 办公室技能,英语成绩等。这些技能对于大部分学生而言都是具备的,区分度也相对有限。

以上的这些只是个人在近些年工作的部分经验总结,不一定正确,也不一定适合所有的人。大家在撰写简历的时候还是要多加总结,然后扬长避短,欢迎大家一起讨论。最后,祝大家都能够找到满意的工作。

如何入门 PyTorch?

PyTorch 是学术界和工业界用来研究和开发深度学习模型的常用工具之一,自 2016 年 9 月 PyTorch 在 GitHub 上开放了 pytorch alpha-1 版本以来,至今已有整整 6 年时间。从一开始只有 PyTorch 的 Tutorial 至今,很多网站和博客都介绍过 PyTorch 的安装和使用方法。

最近,国内的人民邮电出版社推出了一本关于 PyTorch 的教材《PyTorch 深度学习实战》,作者是:Eli Stevens,Luca Antiga,Thomas Viehmann,译者是:牟大恩。本书适用于学校的学生和想了解 PyTorch 的公司开发人员,通过学习这本书,大家都能够掌握使用 PyTorch 开发深度学习模型。

PyTorch 深度学习实战

本书的章节分成三个部分:

  • 第一部分:PyTorch 核心,介绍了深度学习的基础概念和一些简单的神经网络,张量等知识;
  • 第二部分:使用现实数据来学习,包括肺癌的早期检测,训练分类器,增强学习,语义分割等知识;
  • 第三部分:模型的部署,使用 Flask 服务来部署模型,导出模型等知识。

通常情况下,很多 Tutorial 和网络上的博客只会介绍前两部分,毕竟学会了前两部分就可以正常的开发模型,清洗数据。在学术界的绝大部分工作一般也只需要掌握前两部分,在工业界的一些 AI Labs 前两部分也能够满足绝大部分的需求。但是对于业务部门而言,只有前两部分的知识可能就不太够了,还需要有在线上部署模型,提供模型使用的能力。

在移动设备被大家大量使用的今天,很多情况下需要将模型部署在移动设备上,那么仅仅学会离线训练模型,进行数据的预测是远远不够的。有的情况下需要进行必要的模型压缩。除了 Python 之外,可能还需要掌握一些 C++ 的使用方法,同时掌握多个技能,才能够在工业界的业务部门完成各种各样的工作。

除了 Linux 和 macOS 之外,PyTorch 在 2018 年开始逐渐支持 Windows 系统。对于学生党而言,如果只有 Windows 系统,也能够基于现有的电脑进行深度学习的模型开发。

本书会教会读者如何使用 PyTorch 创建神经网络和深度学习系统,它帮助读者快速从零开始构建一个真实示例:肿瘤图像分类器。在构建模型过程中,它涵盖了整个深度学习管道的关键实践,包括 PyTorch 张量 API,用 Python 加载数据,监控训练以及将结果进行可视化展示。

本书主要内容会包括以下几个部分:

  • 训练深层神经网络;
  • 实现模块和损失函数;
  • 使用 PyTorch Hub 预先训练的模型;
  • 探索在 Jupyter Notebooks 中编写示例代码。

本书适用于对深度学习感兴趣的 Python 程序员,了解深度学习的基础知识对阅读本书有一定的帮助,但读者无须具有使用 PyTorch 或其他深度学习框架的经验。本书也有配套的 Python 源代码,方便读者进行下载和学习。

随笔(十四)— 程序员的软技能

程序员是当今社会中诸多职业的一种,也是优秀的计算机等理工专业毕业生所追求的职业之一。在社会大众的认知里面,程序员就是像电影里面的黑客一样,在一个暗无天日的小空间里,面对 Linux 系统编写各种酷炫的程序,最终解决了某个技术问题或者搭建了某个网站。

Technische Hochschule Aachen Rechenzentrum

从程序员的发展历程来看,各大互联网公司都会根据自身的情况,制定各种各样的级别体系,然后再进行职级的横向对比。每一个职级的程序员都有着自己的发展目标和成长路径,其奋斗目标显得相对清晰明确。按照别人制定好的计划或者路径来走或许能够走到某个位置,但总感觉缺少了一点个性化。程序员在大公司绝不仅仅是写代码而已,日常与产品经理的沟通,与其他公司的程序员沟通都是日常工作的一部分。写代码所占据的工作量其实只是一部分而已,绝对不会是全部的工作。

晋升通道

刚工作的时候接触到一本书《软技能:代码之外的生存指南》,作者自己就是一个优秀的程序员。然后结合自身的发展情况,个人的成长履历以及行业的发展,撰写了一本关于程序员软技能的书籍。近两年,这本书有了第二版,也是对第一版有了很大的改进和补充。

软技能第二版

在书中,作者从一开始就提出了一个观点,“经营自己的职业生涯就是经营一家企业”。每一个程序员在刚开始工作的时候,就要树立一种为自己工作的理念。从一个打工者的心态转化成经营一个企业,所提供的服务就是“软件开发”,“数据分析”等工作内容。既然是经营一个企业,那么就必须要有营销的意识。进行必要的自我营销也是提升个人竞争力,个人魅力,甚至提升薪水的一种方法。

从作者的讲解中可以看出,自我营销的方式有很多种,常见的包括但不限于:

  • 博客:搭建属于自己的博客;
  • 视频:无论是 YouTube 长视频还是抖音快手的短视频均可;
  • GitHub:程序员进行自我宣传的最佳平台;
  • 书籍:撰写书籍有助于在大众面前提升曝光;
  • 技术会议:能够参加各种各样的技术会议有助于提升个人影响力。

而在做自我营销的过程中,除了自身要有一定的知识储备对外宣传之外,更重要的则是坚持不懈地做某件事情。坚持做一件事情的难度是远高于心血来潮做事情的。在不同的自我营销平台上,由于观众是略有差异的,因此在内容侧需要进行必要的调整和重组,以迎合更多观众的喜好。坚持不懈地做某件事情也有利于在社交平台保证稳定的活跃度,可以长期的获得必要的流量。在现有的互联网环境下,有流量就可以带货,做培训,开直播,甚至提供必要的收入来源。

在做程序员的时候,最重要的就是生产力,拥有优秀的生产力可以大量提升效率,也可以提升收入。为了获得更高的生产力,每日/每周/每月的计划就需要提前安排。通过各种 Calendar 日历工具提前安排自己的工作,基于 Rescue Time 等时间管理工具来安排有效的工作时间。培养一个好习惯有助于经营自己。

作者在有段时间内进行了“艰苦工作”的模式,不仅完成自己的日常工作,还在工作日晚上和周末制作在线课程,且每周更新自己的博客内容。在持续工作的过程中,作者开始拥有了源源不断的被动收入,不仅包括博客的收入,还包括一些 APP 的收入,甚至投入的房地产也获得了不错的收益。

在获得成功的路上,作者也推荐了一些书籍,例如《影响力》,《意志力陷阱》等。同时也强调了走出舒适区这一个重要的概念,每个人其实都愿意在自己的舒适区呆着,很难主动地走出自己的舒适区,毕竟万事开头难。一旦走出了舒适区,如何坚持做某件事情又是一件有难度的事情。这些问题作者都基于亲身经历进行了详细解答。

作为一个职场中的程序员,除了日常的努力工作之外,到底还有多少东西需要了解和学习呢?相信这本书会给读者提供一个全新思路和参考答案。

随笔(十三)— 深圳的大梅沙

在读书期间笔者就没有旅游的习惯,每次看到身边同学发一些关于旅游的视频或者图片,心里面虽然也会想去,但是总由于各种原因而迟迟不愿意动身。后来博士毕业之后来到深圳,稍微培养了一点旅游的习惯,主要也是为了给紧张忙碌的生活减缓一些压力。博士毕业距今已经有差不多七年的时间,在这七年的时间里,去过两次日本,两次台湾,一次韩国,一次老挝,其他就是三亚,厦门,长沙,广州,潮汕,惠州。其他的城市可能也是出差居多,例如北京,上海等。

上面提到的国家,地区,或者城市,有一部分是跟着公司所组织的团队建设一同前往,有一些则是自己安排的出行计划。在深圳的工作时间也有七年,但其实笔者并没有去过深圳的景点。世界之窗,欢乐谷,东部华侨城都还没有去过。而对于深圳的著名景点之一的大梅沙,笔者也仅仅去过两次。

第一次去大梅沙是因为刚刚入职公司,需要跟随公司参加其新入职员工的培训,时间长度是十天。在这十天里面,笔者作为新人听到了无数的新名词,很多之前完全没有听过,也没有了解过的东西。除了介绍公司架构,公司文化等,还有不少的团队活动,例如篮球比赛,毕业晚会。现在回想起来这些事情肯定觉得不难,但是笔者作为当时的新人,还是有一定的压力。因为每天的日程安排都十分的紧凑,这与之前读博期间的生活形成了鲜明的对比。

深圳中兴拓展基地的宿舍 1(来自百度地图)​
深圳中兴拓展基地的宿舍 2(来自百度地图)​

在 2015 年的时候,大家都可以正常生活,无论是个人的工作还是公司的集中培训都不会有太大的风险。公司一直都比较重视应届生的培养计划,毕竟应届生是公司未来发展的基础。于是,那段时间有一部分应届生都会在大梅沙附近进行封闭十天的培训。

在那十天,除了完成日常的学习培训之外,其余的时间基本上就是自己的了,虽然回想起来也没有太多自己的时间。当时貌似也抽空去大梅沙走了一下,看了一下深圳的海。随着当时十天的封闭培训结束,每个培训班的同事们也就回到了各自的工作岗位,三年之后凑了一些同事出来吃饭,但后来有一些同事最终还是离开了深圳去其他城市继续发展。感觉就像是做完了一个临时项目,后续就很难再次汇聚到一起做一些有意思的事情了。

来到 2022 年,全国上下都或多或少受到了疫情的影响,大梅沙有段时间也是关闭状态。近期深圳的疫情不算严重,很多景点重新开放给群众。但此刻我已经换了一家新的公司,来大梅沙还是跟着团队活动。这次活动的组织者在大梅沙八号仓附近租了一个民宿,整个团队的同事都来这边放松一两天。从民宿到大梅沙海滨公园大约 10 分钟的路程,如果需要逛街的话可以考虑旁边的大梅沙八号仓。由于疫情影响的原因,之前可以走的一些路已经被封了起来,而且大梅沙的人数跟之前相比其实并没有那么多。来了深圳之后,日常都是在办公室和家两点一线,很少会出门看海。不过,每次看海就会想到一个故事:“smale 当年在研究数学的时候,每天就拿着一支笔和几张纸去巴西的海滩坐着,直到把动力系统的问题研究出来为止。”

新加坡东海岸—摄于20150515
新加坡东海岸的珍宝海鲜楼 — 20150515

在 2015 年离开新加坡之前,应该是唯一一次去新加坡的东海岸,毕竟 NUS 是位于新加坡的西海岸。当时在新加坡的东海岸走了整整一个下午,晚餐的时候在珍宝海鲜楼点了一个黑胡椒螃蟹,以及一瓶 Corona 啤酒。当时去东海岸的动机可能只是想走一走新加坡,看一看新加坡整个城市,看一看东海岸的海滩。回想起来,从南京毕业了之后就再也没回过南京,从新加坡毕业了之后就再也没有回过新加坡了。

样本量与置信区间

在现实生活中,如何从一份海量的数据中选择合适的样本数量进行调研反馈,从而反映总体的情况是一个常见的问题。例如,在千万人口的城市进行某项调研如何选择样本;在某些国家的大选活动中,该发放多少问卷才能够反映整体情况;在机器学习模型的精确率抽检过程中,究竟应该选择多少样本数进行抽检,才能够反馈其模型的精确率;这些都是生活和工作中常遇到的问题。

通常来说,在这里会有两种比较常见的情况:
1. 通过置信度(confidence level),置信区间(confidence interval),总体数量(population),来计算样本数(sample size);
2. 通过置信度(confidence level),总体数量(population),样本数量(sample size),比例(percentage),来计算置信区间(confidence interval);

样本数的计算

当一个调研是随机抽样的时候,可以通过统计的方法来确定最小的样本数。一般情况下,样本数可以按照以下简单规则来进行选取:

  • 最小样本数是 100:对于一份抽样数据而言,至少要抽取 100 个样本来进行评估;而当全体总数小于 100 的时候,只需要全部抽取出来进行调研和分析即可;
  • 一个合适的最大样本数(maximum sample size)可以用以下公式简单计算:\min(1000, 0.1 * N), 其中 N 表示总量;例如,当 N = 5000 时,最大样本数可以选择 500;而当 N = 200000 时,最大样本数只需要选择 1000 即可;
  • 在调研和抽样的时候,可以在最小样本数和最大样本数之间选择一个合适的值;
    (1)选择一个靠近最小样本数的值是因为:有限的资金和时间;只需要一个粗糙的估计;不需要对总体做类别分析且只需要一个整体的结论即可;大家对这个结论并不会有过多的质疑;这个分析结果并不会过多影响下游的分析决策。
    (2)选择一个靠近最大样本数的值是因为:充足的资金和时间;想要得到发一个精确的估计;有可能会对总体进行分组分析;大家会对这个结论有质疑;这个分析结果会导致下游的很多重要决策。
  • 对于样本数的选择,可以简单的参考下表:
总量总量总量总量总量总量
误差范围(Margin of Error)> 5000500025001000500200
\pm 10\%969493888165
\pm 7.5\%17116516014612792
\pm 5\%384357333278217132
\pm 3\%1067880748516341169
置信度 95% 的前提下
  • 从表格中可以看出,如果只需要保证置信度在 95%,当总量很大的时候,其实只需要抽取 1067 个样本进行分析即可。
  • 在线计算样本量的网站有两个,分别是:
    (1)https://www.surveysystem.com/sscalc.htm
    (2)https://www.calculator.net/sample-size-calculator.html?
置信度 95%
置信度 99%

通过以上的案例可以看出,在设置了置信度(Confidence Level),置信区间(Confidence Interval),总量(Population)之后,就可以得到一个样本数量(Sample Size Needed)。其中,置信区间也就是误差范围(Margin of Error)。

例如,如果置信度是 95%,置信区间(confidence interval)= 4,在样本中有 47% 的比例选择了某个选项,那么就表示 95% 的置信度,在所有数据中有(47%-4%, 47%+4%)=(43%,51%) 的比例选择了某个选项。95% 置信度表示这句话正确的概率是 95%,99% 置信度表示这句话正确的概率是 99%。

置信区间的计算

置信区间的计算是由三个因素决定的,分别是:置信度(Confidence Level),样本数量(Sample Size),总量(Population)。一般来说,

  • 置信度:置信度越大,表示置信区间将会越大。相对 99% 的置信度而言,95% 的置信度所产生的置信区间会小;
  • 样本大小:样本越多,越能够反映总体情况,置信区间将会越小;
  • 占比(Percentage):样本中选择某个结果的比例;由于选择 Percentage(p) 和 1-p 所得到的置信区间(Confidence Interval)是一样的,因此:
    (1)Percentage(p) 越接近 0 或者 1,则置信区间越小;
    (2)Percentage(p) 越接近 50%,则置信区间越大,因为此时的不确定性最高;
置信区间的计算 1
置信区间的计算 2
置信区间的计算 3
置信区间的计算 4

统计理论分析

假设 N 表示总体的数量,X 表示总体中满足某个选项的数量,n 表示抽样的数量,x 表示样本中满足某个选项的数量。令 P=X/N, \hat{p}=x/n.

定理. 一个总体满足某个选项的比例可以通过样本中满足某个选项的比例来进行估计。如果置信度是 C,且正态分布的概率用 Prob 表示,那么

Prob\bigg(-z^{*}<\frac{\hat{p}-P}{\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}}<z^{*}\bigg)=C,

换言之,\hat{p}-z^{*}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}<P<\hat{p}+\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}. 其中 z^{*}C 的关系如下图所示。其置信区间是 w = z^{*}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}.

正态分布

由于置信区间是 z^{*}\cdot\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}, 所以,n=(z^{*}/w)^{2}\cdot\hat{p}(1-\hat{p})\leq (z^{*}/w)^{2}/4. 最大样本数可以选择为 (z^{*}/w)^{2}/4.

同时,根据正态分布的定义可以得到:

\frac{1}{\sqrt{2\pi}}\int_{-z^{*}}^{z^{*}}e^{-t^{2}/2}dt=C,

从而,

C=\frac{2}{\sqrt{\pi}}\int_{0}^{z^{*}/\sqrt{2}}e^{-t^{2}}dt=erf(z^{*}/\sqrt{2}),

其中,erf(z)=\frac{2}{\sqrt{\pi}}\int_{0}^{z}e^{-t^{2}}dt.

因此,最大样本数是 (z^{*}/w)^{2}/4=\bigg(\frac{erf^{-1}(C)}{\sqrt{2}w}\bigg)^{2}, w 表示置信区间,C 表示置信度。

置信区间的公式是:z^{*}\cdot\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}=\sqrt{2}\cdot erf^{-1}(C)\cdot\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}.

从 WolframAlpha 可以得到:erf^{-1}(0.95)=1.38590, erf^{-1}(0.99)=1.82139.

  • 如果置信区间是 3\%, 置信度 C=95\% 的时候,最大样本数是:(1.38590 / (\sqrt{2} * 0.03))^2=1067;
  • 如果置信区间是 3\%, 置信度 C=99\% 的时候,最大样本数是:(1.82139 / (\sqrt{2} * 0.03))^2=1843;
  • 如果置信度是 C=95\%, \hat{p}=50\%, n=1000, 置信区间是 \sqrt{2} * 1.38590 * \sqrt{0.5 * 0.5 /1000}=0.031=3.1\%;
  • 如果置信度是 C=99\%, \hat{p}=50\%, n=1000, 置信区间是 \sqrt{2} * 1.82139* \sqrt{0.5 * 0.5 /1000}=0.0407=4.1\%.

参考资料

  1. 在线计算工具(1):https://www.surveysystem.com/sscalc.htm
  2. 在线计算工具(2):https://www.calculator.net/sample-size-calculator.html
  3. http://www.tools4dev.org/resources/how-to-choose-a-sample-size/
  4. https://www.chedong.com/blog/archives/001462.html
  5. https://www.afenxi.com/23249.html
  6. https://www.zhihu.com/question/23017185
  7. https://blog.csdn.net/liangzuojiayi/article/details/78044780
  8. :Sample Size Determination: https://en.wikipedia.org/wiki/Sample_size_determination#Estimation_of_a_proportion
  9. Population proportion: https://en.wikipedia.org/wiki/Population_proportion#cite_note-:0-4
  10. 张伟平:中文讲义:http://staff.ustc.edu.cn/~zwp/teach/Math-Stat/mathstat.htm
  11. http://staff.ustc.edu.cn/~zwp/teach/Prob-Stat/probstat.htm

社交网络之间的帐号映射

帐号映射的整体介绍

在现实生活中,用户通常会同时使用多个社交网络,例如国外的 Twitter,Instagram,Facebook,也可能使用微信,QQ,微博等国内的产品。基于这些产品的不同定位,用户自身的社交网络会有很大的差异,那么如何通过机器学习算法找到一个人的社交网络帐号就成为了一个有趣的问题。在学术界,有学者对开源的 Facebook,Twitter 等社交网络数据进行了研究,设计了一套帐号映射的技术方案。

帐号映射这个课题有很多的别名,例如:

  • Social identity linkage;
  • User identity linkage;
  • User identity resolution;
  • Social network reconciliation;
  • User account linkage inference;
  • Profile linkage;
  • Anchor link prediction;
  • Detecting me edges;

帐号映射的目的就是将社交网络上这些看似不同的帐号映射到自然人:帐号(user accounts)-> 真实的自然人(real natural person)。令社交网络 \mathcal{G}=\mathcal{G}(\mathcal{U},\mathcal{E}) 是一个图,顶点是帐号 \mathcal{U}=\{u_{1},\cdots,u_{n}\}, 边是由帐号之间的连线 \mathcal{E}\subseteq \mathcal{U}\times\mathcal{U} 所构成的。

帐号映射(User Identity Linkage)的定义是:给定两个社交网络 \mathcal{G}^{s}=(\mathcal{U}^{s},\mathcal{E}^{s})\mathcal{G}^{t}=(\mathcal{U}^{t},\mathcal{E}^{t}), 其目标是找到一个函数 \mathcal{F}:\mathcal{U}^{s}\times\mathcal{U}^{t}\rightarrow\{0,1\} 使得,
\mathcal{F}(u^{s},u^{t})=\begin{cases}1,\text{ if } u^{s} \text{ and } u^{t} \text{ belong to same person,}\\ 0, \text{ otherwise.} \end{cases}
其中 u^{s}\in\mathcal{U}^{s}, u^{t}\in\mathcal{U}^{t}.

上述函数 \mathcal{F} 就是模型需要学习的目标函数,进一步地,对于 u^{s}\in\mathcal{U}^{s}, u^{t}\in\mathcal{U}^{t}, 学习得到的预测函数 \mathcal{\hat{F}}(u^{s},u^{t})=p\in [0,1] 表示两个帐号属于同一个自然人的概率值。

一个帐号在社交网络的属性包括很多方面,例如:

画像属性(Profile Features)内容属性(Content Features)社交网络属性(Network Features)
ID(社交网络的唯一标识)时间戳(timestamp)关注,被关注,好友关系(Friendship)
身份证 ID(identity card)语音(speech)点赞(like)
手机号(phone)视频(video)评论(comment)
昵称(username)图片(image)@(at)
头像(head image)文本(text)收藏(collect)
性别(gender)设备信息(device)消息(message)
年龄(age)wifi 信息(wifi)回复(reply)
邮箱(email)地理位置(gps)
个人网页(url)
职业(occupation)
常见的社交网络数据

一般情况下,

  1. 画像属性:绝大多数帐号都会有基础的画像信息;
  2. 内容属性:不活跃的帐号较难获取;
  3. 社交网络属性:线上的社交网络关系并不代表线下的社交网络关系,存在一定的噪声数据。

帐号映射的技术框架可以基于特征工程来做,然后使用有监督算法,无监督算法,或者半监督算法来进行帐号对之间的训练和预测。

帐号映射的技术框架

帐号映射的特征工程

帐号的画像特征

对于社交网络 \mathcal{G}=\mathcal{G}(\mathcal{U},\mathcal{E}) 中的一个帐号 u\in\mathcal{U} 而言,用 \overrightarrow{p_{u}}=(p_{u}^{1},\cdots,p_{u}^{m}) 来表示画像特征向量,其中 m\geq 1 表示画像属性特征的个数。对于两个社交网络 \mathcal{G}^{s},\mathcal{G}^{t} 的帐号 u^{s},u^{t} 而言,可以得到相应的画像特征向量 \overrightarrow{p_{u^{s}}},\overrightarrow{p_{u^{t}}}, 然后可以用基于距离(distance-based)或者基于频率(frequence-based)的方法来获得向量的距离或者相似性。换句话说,就是通过加权平均算法来获得结果:

sim(\overrightarrow{p_{u^{s}}},\overrightarrow{p_{u^{t}}})=\sum_{1\leq i\leq m}w_{i}\cdot sim(p_{u^{s}}^{i},p_{u^{t}}^{i}), 或者

dis(\overrightarrow{p_{u^{s}}},\overrightarrow{p_{u^{t}}})=\sum_{1\leq i\leq m}w_{i}\cdot dis(p_{u^{s}}^{i},p_{u^{t}}^{i}),

其中 sim 表示相似度,dis 表示距离。

基于距离的方法(distance-based)的方法很多,例如:

  1. 文本(text field)之间的距离可以考虑用 Jaro-Winkler distance,Jaccard similarity,Levenshtein distance 等方法;
  2. 图像(visual field)之间的距离可以考虑用 mean square error,dot product,angular distance,peak signal-to-noise ratio,Levenshtein distance 等方法;

基于频率的方法(frequence-based)可以考虑 bag-of-word model,TF-IDF model,Markov-chain model 等方法;

帐号的内容特征

帐号所产生的内容数据包括三个部分:

  1. 时间上的数据(temporal):时间戳的数据;
  2. 空间上的数据(spatial):帐号的设备数据,IP 数据,WIFI 数据,地理位置数据等等;
  3. 内容上的数据(post):帐号所产生的内容数据,包括但不限于视频,文本,语音,图片等。

用数学公式来描述就是 \overrightarrow{c_{u}}=\{(t_{1},s_{1},p_{1}), \cdots,(t_{m},s_{m},p_{m})\}, 其中 t_{i},s_{i},p_{i}(1\leq i\leq m) 分别表示时间戳,空间数据,内容数据。

在某个时间段内,帐号所产生的内容特征可以提炼出用户在社交网络上的行为数据和内容数据,形成一个行为序列。通过这个行为序列,可以得到用户的内容特征。

  1. 基于兴趣的特征(Interest-based):可以基于内容数据判断帐号对哪些内容更感兴趣;
  2. 基于风格的特征(Style-based):基于内容数据得到帐号的写作风格,例如常用词语等;
  3. 基于轨迹的特征(Trajectory-based):基于帐号的行为轨迹数据,包括设备,IP,WIFI,地理位置以及相应的时间戳,得到帐号的足迹(footprint)。

帐号的社交网络特征

社交网络包括两种:

  1. 局部社交网络(local network):查看帐号的邻居(关注,被关注,好友关系)等诸多数据;
  2. 全局社交网络(global network):查看帐号在全局数据中的位置情况;

对于帐号的社交网络特征,包括以下两种常见形式:

  1. 基于邻居的特征(Neighborhood-based):共同好友数,共同邻居个数,Jaccard Coefficient,Overlap Coefficient,Dice Coefficient,Adamic/Adar score;
  2. 基于嵌入的特征(Embedding-based):通过计算帐号在相应的社交网络的嵌入特征,然后计算特征之间的距离或者相似性。

帐号映射的建模思路

机器学习的常见算法包括有监督算法(supervised model),无监督算法(unsupervised model)和半监督算法(semi-supervised model)。

基于上面的特征工程,加上合适的权重之和可以得到一个分数(score),也就是:

\mathcal{F}(u^{s},u^{t})=\alpha \cdot sim_{p}(\overrightarrow{p_{u^{s}}}, \overrightarrow{p_{u^{t}}})+\beta\cdot sim_{c}(\overrightarrow{p_{u^{s}}}, \overrightarrow{p_{u^{t}}})+\gamma\cdot sim_{n}(\overrightarrow{p_{u^{s}}}, \overrightarrow{p_{u^{t}}}),

其中 sim_{p}, sim_{c}, sim_{n} 分别表示画像(profile),内容(content),社交网络(network)之间的相似度。

如果有样本的话,全体样本是 \mathcal{Q}=\{(u^{s},u^{t}),\forall u^{s}\in\mathcal{U}^{s},\forall u^{t}\in\mathcal{U}^{t}\}, 那么正样本是 \mathcal{M}=\{(u^{s},u^{t}),u^{s}\in\mathcal{U}^{s},u^{t}\in\mathcal{U}^{t}, u^{s} \text{ and } u^{t} \text{ belong to the same person}\}, 负样本 \mathcal{N}=\mathcal{Q}-\mathcal{M}. 在实际使用的时候,要注意采样的比例和负样本的选择方法。

帐号映射的评价指标

对于 u^{s}\in\mathcal{U}^{s}, u^{t}\in\mathcal{U}^{t}, 假设
\mathcal{Q}=\{(u^{s},u^{t}),\forall u^{s}\in\mathcal{U}^{s},\forall u^{t}\in\mathcal{U}^{t}\} 是所有的帐号对,
\mathcal{M}=\{(u^{s},u^{t}),u^{s}\in\mathcal{U}^{s},u^{t}\in\mathcal{U}^{t}, u^{s} \text{ and } u^{t} \text{ belong to the same person}\} 是所有属于相同自然人的帐号对,
\mathcal{N}=\mathcal{Q}-\mathcal{M} 是所有属于不同自然人的帐号对。
\mathcal{A}= {被算法映射成相同自然人的帐号对},\mathcal{B}= {被算法映射成不同自然人的帐号对};用 TP, TN, FN, FP 来描述就是:

  • True Positive(TP):|\mathcal{A} \cap \mathcal{M}|;
  • True Negative(TN):|\mathcal{B}\cap\mathcal{N}|;
  • False Negative(FN):|\mathcal{B}\cap\mathcal{M}|;
  • False Positive(FP):|\mathcal{A}\cap\mathcal{N}|;

那么,Precision = TP / (TP + FP)=|\mathcal{A}\cap\mathcal{M}|/|\mathcal{A}|, Recall = TP / (TP + FN)= |\mathcal{A}\cap\mathcal{M}|/|\mathcal{M}|.

另外,F1=2\cdot Precision \cdot Recall / (Precision + Recall), Accuracy=(TP+TN)/(TP+TN+FP+FN).

部分论文细节

  1. Liu, Jing, et al. “What’s in a name? An unsupervised approach to link users across communities.” Proceedings of the sixth ACM international conference on Web search and data mining. 2013. 本篇文章主要是基于用户的名字来识别跨网络的用户的,提取用户的特征之后,使用 SVM 分类器来进行识别;
  2. Riederer, Christopher, et al. “Linking users across domains with location data: Theory and validation.” Proceedings of the 25th International Conference on World Wide Web. 2016. 本篇文章主要是基于用户的内容特征来进行建模;
  3. Labitzke, Sebastian, Irina Taranu, and Hannes Hartenstein. “What your friends tell others about you: Low cost linkability of social network profiles.” Proc. 5th International ACM Workshop on Social Network Mining and Analysis, San Diego, CA, USA. 2011. 本篇论文是根据社交网络中的用户邻居数据,来判断用户之间相似性的。

参考文献

  1. Shu, Kai, et al. “User identity linkage across online social networks: A review.” Acm Sigkdd Explorations Newsletter 18.2 (2017): 5-17.
  2. Liu, Jing, et al. “What’s in a name? An unsupervised approach to link users across communities.” Proceedings of the sixth ACM international conference on Web search and data mining.
  3. Riederer, Christopher, et al. “Linking users across domains with location data: Theory and validation.” Proceedings of the 25th International Conference on World Wide Web. 2016.
  4. Labitzke, Sebastian, Irina Taranu, and Hannes Hartenstein. “What your friends tell others about you: Low cost linkability of social network profiles.” Proc. 5th International ACM Workshop on Social Network Mining and Analysis, San Diego, CA, USA. 2011.

近似最近邻搜索算法 ANNOY(Approximate Nearest Neighbors Oh Yeah)

在搜索的业务场景下,基于一个现有的数据候选集(dataset),需要对新来的一个或者多个数据进行查询(query),返回在数据候选集中与该查询最相似的 Top K 数据。

Google:the two-tower neural network model

最朴素的想法就是,每次来了一个新的查询数据(query),都遍历一遍数据候选集(dataset)里面的所有数据,计算出 query 与 dataset 中所有元素的相似度或者距离,然后精准地返回 Top K 相似的数据即可。

但是当数据候选集特别大的时候,遍历一遍数据候选集里面的所有元素就会耗费过多的时间,其时间复杂度是 O(n), 因此,计算机科学家们开发了各种各样的近似最近邻搜索方法(approximate nearest neighbors)来加快其搜索速度,在精确率和召回率上面就会做出一定的牺牲,但是其搜索速度相对暴力搜索有很大地提高。

在这个场景下,通常都是欧式空间里面的数据,形如 \bold{x}=(x_{1},\cdots,x_{n})\in \mathbb{R}^{n}, 其中 n 是欧氏空间的维度。常用的距离公式包括:

  • Manhattan 距离:L1 范数;
  • Euclidean 距离:L2 范数;
  • Cosine 距离:1 – Cosine 相似度;
  • 角距离:用两个向量之间的夹角来衡量两者之间的距离;
  • Hamming 距离:一种针对 64 维的二进制数的 Manhattan 距离,相当于 \mathbb{R}^{64} 中的 L1 范数;
  • Dot Product 距离\bold{x}\cdot \bold{y}=\sum_{i=1}^{n}x_{i}\cdot y_{i}.
欧氏空间的数据点聚类

在近似最近邻搜索(ANN)领域,有很多开源的算法可以使用,包括但不限于:

  • Annoy(Approximate Nearest Neighbors Oh Yeah);
  • ScaNN(Scalable Nearest Neighbors);
  • Faiss(Billion-scale similarity search with GPUs);
  • Hnswlib(fast approximate nearest neighbor search);

本文将会重点介绍 Annoy 算法及其使用案例;

ANN 的 benchmark

Annoy 的算法思想

本文以 \mathbb{R}^{2} 中的点集来作为案例,介绍 annoy 算法的基本思想和算法原理。

二维欧氏空间中的点集

用 n 表示现有的文档个数,如果采用暴力搜索的方式,那么每次查询的耗时是 O(n), 采用合适的数据结构可以有效地减少查询的耗时,在 annoy 算法中,作者采用了二叉树这个数据结构来提升查询的效率,目标是把查询的耗时减少至 O(\ln(n)).

用中垂线来作为切分平面

刚开始的时候,在数据集中随机选择两个点,然后用它们的中垂线来切分整个数据集,于是数据集就被分成了蓝绿两个部分。然后再随机两个平面中各选出一个顶点,再用中垂线进行切分,于是,整个平面就被切成了四份。

继续切分

用一颗二叉树来表示这个被切分的平面就是:

用二叉树来表示切分平面

后续继续采用同样的方式进行切分,直到每一个平面区域最多拥有 K 个点为止。当 K = 10 时,其相应的切分平面和二叉树如下图所示。

持续随机切分
K = 10 的时候,每个子平面最多 10 个点
相应的二叉树

下面,新来的一个点(用红色的叉表示),通过对二叉树的查找,我们可以找到所在的子平面,然后里面最多有 K = 10 个点。从二叉树的叶子节点来看,该区域只有 7 个点。

红叉表示需要查询的点
搜索路径

在 ANN 领域,最常见的两个问题是:

  1. 如果我们想要 Top K 的点,但是该区域的点集数量不足 K,该怎么办?
  2. 如果真实的 Top K 中部分点不在这个区域,该怎么办?

作者用了两个技巧来解决这个问题:

  1. 使用优先队列(priority queue):将多棵树放入优先队列,逐一处理;并且通过阈值设定的方式,如果查询的点与二叉树中某个节点比较相似,那么就同时走两个分支,而不是只走一个分支;
  2. 使用森林(forest of trees):构建多棵树,采用多个树同时搜索的方式,得到候选集 Top M(M > K),然后对这 M 个候选集计算其相似度或者距离,最终进行排序就可以得到近似 Top K 的结果。

同时走两个分支的的示意图:

随机生成多棵树,构建森林的示意图:

随机生成多颗树

Top K 的查询方法:

选择候选区域
获得区域中的所有点
区域中 Top K 点排序

Annoy 算法原理:

构建索引:建立多颗二叉树,每颗二叉树都是随机切分的;

查询方法
1. 将每一颗树的根节点插入优先队列;
2. 搜索优先队列中的每一颗二叉树,每一颗二叉树都可以得到最多 Top K 的候选集;
3. 删除重复的候选集;
4. 计算候选集与查询点的相似度或者距离;
5. 返回 Top K 的集合。

Annoy 的编程实践

Annoy 的安装:

pip install annoy

Annoy 的 Python 接口函数

常用的 Annoy Python 接口函数包括以下内容:

  • a = AnnoyIndex(f, metric):f 指的是向量的维度,metric 表示度量公式。在这里,Annoy 支持的度量公式包括:”angular”, “euclidean”, “manhattan”, “hamming”, “dot”;
  • a.add_item(i, v):i 是一个非负数,表示 v 是第 i 个向量;
  • a.build(n_trees, n_jobs=-1):n_trees 表示树的棵数,n_jobs 表示线程个数,n_jobs=-1 表示使用所有的 CPU 核;
  • a.save(fn, prefault=False):表示将索引存储成文件,文件名是 fn;
  • a.load(fn, prefault=False):表示将索引从文件 fn 中读取出来;
  • a.unload():表示不再加载索引;
  • a.get_nns_by_item(i, n, search_k=-1, include_distances=False):返回在索引中的第 i 个向量 Top n 最相似的向量;如果不提供 search_k 值的话,search_k 默认为 n_tree * n,该指标用来平衡精确度和速度;includ_distances=True 表示返回的时候是一个包含两个元素的 tuple,第一个是索引向量的 index,第二个就是相应的距离;
  • a.get_nns_by_vector(v, n, search_k=-1, include_distances=False):返回与向量 v Top n 最相似的向量;如果不提供 search_k 值的话,search_k 默认为 n_tree * n,该指标用来平衡精确度和速度;includ_distances=True 表示返回的时候是一个包含两个元素的 tuple,第一个是索引向量的 index,第二个就是相应的距离;
  • a.get_item_vector(i):返回添加索引的时候的第 i 个向量;
  • a.get_distance(i, j):返回第 i 个向量与第 j 个向量的距离;
  • a.get_n_items():返回索引中的向量个数;
  • a.get_n_trees():返回索引中的树的棵数;
  • a.on_disk_build(fn):在一个文件 fn 中构建索引,并不在内存中构建索引;
  • a.set_seed(seed):用给定的种子初始化随机数生成器,需要在建树,添加向量构建索引之前使用该函数;

影响 annoy 算法效率和精度的重要参数:

  • n_trees:表示树的棵数,会影响构建索引的时间。值越大表示最终的精度越高,但是会有更多的索引;
  • search_k:值越大表示搜索耗时越长,搜索的精度越高;如果需要返回 Top n 最相似的向量,则 search_k 的默认值是 n_trees * n;

Annoy 的使用案例

from annoy import AnnoyIndex
import random

# f 表示向量的维度
f = 40
# 'angular' 是 annoy 支持的一种度量;
t = AnnoyIndex(f, 'angular')  # Length of item vector that will be indexed
# 插入数据
for i in range(1000):
    v = [random.gauss(0, 1) for z in range(f)]
    # i 是一个非负数,v 表示向量
    t.add_item(i, v)

# 树的数量
t.build(10) # 10 trees

# 存储索引成为文件
t.save('test.ann')

# 读取存储好的索引文件
u = AnnoyIndex(f, 'angular')
u.load('test.ann') # super fast, will just mmap the file

# 返回与第 0 个向量最相似的 Top 100 向量;
print(u.get_nns_by_item(0, 1000)) # will find the 1000 nearest neighbors

# 返回与该向量最相似的 Top 100 向量;
print(u.get_nns_by_vector([random.gauss(0, 1) for z in range(f)], 1000))

# 返回第 i 个向量与第 j 个向量的距离;
# 第 0 个向量与第 0 个向量的距离
print(u.get_distance(0, 0))
# 第 0 个向量与第 1 个向量的距离
print(u.get_distance(0, 1))

# 返回索引中的向量个数;
print(u.get_n_items())
# 返回索引中的树的棵数;
print(u.get_n_trees())

# 不再加载索引
print(u.unload())

基于 hamming 距离的 annoy 使用案例:

from annoy import AnnoyIndex

# Mentioned on the annoy-user list
bitstrings = [
 '0000000000011000001110000011111000101110111110000100000100000000',
    '0000000000011000001110000011111000101110111110000100000100000001',
    '0000000000011000001110000011111000101110111110000100000100000010',
    '0010010100011001001000010001100101011110000000110000011110001100',
    '1001011010000110100101101001111010001110100001101000111000001110',
    '0111100101111001011110010010001100010111000111100001101100011111',
    '0011000010011101000011010010111000101110100101111000011101001011',
    '0011000010011100000011010010111000101110100101111000011101001011',
    '1001100000111010001010000010110000111100100101001001010000000111',
    '0000000000111101010100010001000101101001000000011000001101000000',
    '1000101001010001011100010111001100110011001100110011001111001100',
    '1110011001001111100110010001100100001011000011010010111100100111',
]

# 将其转换成二维数组
vectors = [[int(bit) for bit in bitstring] for bitstring in bitstrings]

# 64 维度
f = 64
idx = AnnoyIndex(f, 'hamming')
for i, v in enumerate(vectors):
    idx.add_item(i, v)

# 构建索引
idx.build(10)
idx.save('idx.ann')
idx = AnnoyIndex(f, 'hamming')
idx.load('idx.ann')
js, ds = idx.get_nns_by_item(0, 5, include_distances=True)

# 输出索引和 hamming 距离
print(js, ds)

基于欧几里得距离的 annoy 使用案例:

from annoy import AnnoyIndex
import random

# f 表示向量的维度
f = 2
# 'euclidean' 是 annoy 支持的一种度量;
t = AnnoyIndex(f, 'euclidean')  # Length of item vector that will be indexed
# 插入数据
t.add_item(0, [0, 0])
t.add_item(1, [1, 0])
t.add_item(2, [1, 1])
t.add_item(3, [0, 1])

# 树的数量
t.build(n_trees=10) # 10 trees
t.save('test2.ann')

u = AnnoyIndex(f, 'euclidean')
u.load('test2.ann') # super fast, will just mmap the file

print(u.get_nns_by_item(1, 3)) # will find the 1000 nearest neighbors

print(u.get_nns_by_vector([0.1, 0], 3))

参考资料

  1. GitHub 的 Annoy 开源代码:https://github.com/spotify/annoy
  2. Nearest neighbors and vector models – part 2 – algorithms and data structures:https://erikbern.com/2015/10/01/nearest-neighbors-and-vector-models-part-2-how-to-search-in-high-dimensional-spaces.html
  3. ann-benchmark 的效果测试:https://github.com/erikbern/ann-benchmarks

牛熊证基础知识以及案例介绍

牛熊证基础知识

牛熊证跟期权一样,是带有杠杆的衍生产品,可以做到以小博大的效果。只需要用部分资金,就可以跟踪标的资产的表现。

以小博大

期权与牛熊证的对比

  • 牛证(Bulls):与看涨期权(Call)类似,在对股票看涨的时候用;
  • 熊证(Bears):与看跌期权(Put)类似,在对股票看空的时候用;
期权牛熊证标的股票上涨标的股票下跌
看涨期权(Call)牛证权证理论价格上涨权证理论价格下跌
看跌期权(Put)熊证权证理论价格下跌权证理论价格上涨
期权与牛熊证

期权与牛熊证的价值:

  • 期权的价值 = 内在价值 + 时间价值;
  • 牛熊证价格 = 内在价值 + 财务费用;
期权内在价值时间价值
看涨期权max{股价 – 行权价, 0}权利金 – 内在价值
看跌期权max{行权价 – 股价, 0}权利金 – 内在价值
期权的价值

牛熊证与期权的不同:牛熊证有强制收回机制;

  • R 类牛熊证:收回价 != 行使价,被收回后有可能还有价值;收回之后只要没有触碰到行使价,就会有剩余价值结算;收回之后一旦触碰行使价,就没有剩余价值。
  • N 类牛熊证:收回价 = 行使价,被收回后没有价值。
牛熊证每股剩余价值(被收回后)计算公式
牛证每股剩余价值(结算价 – 行使价) / 换股比率
熊证每股剩余价值(行使价 – 结算价) / 换股比率
剩余价值的计算
牛证收回价 > 牛证行使价
熊证收回价 < 熊证行使价

牛熊证可以在观察期(包括开市前时段,持续交易时段,收市竞价交易时段)被收回。即使牛熊证在下午 4 点之后停止买卖,但是如果标的股票在收市竞价交易时段触发收回价,该牛熊证认可被收回。

牛熊证上午被收回
牛熊证下午被收回

到期之后,牛熊证也会被收回并结算,具有内在价值的牛熊证将获得现金价值。牛熊证的最后交易日 = 牛熊证的到期日减去一个交易日;

牛熊证内在值财务费用
牛证(股价 – 行使价) / 换股比率财务费用 =(行使价/换股比率)x 财务利率(一年)x (剩余年期(日数至到期日)/365)
熊证(行使价 – 股价) / 换股比率财务费用 =(行使价/换股比率)x 财务利率(一年)x (剩余年期(日数至到期日)/365)
牛熊证的价值

备注:

  • 距到期日越远的牛熊证,财务费用越大;距到期日越近的牛熊证,财务费用越小;当到期或者被收回时,财务费用会归零;
  • 财务费用占牛熊价值的比率较少,就算是较长期的产品,普遍也在几个百分点内,而牛熊证上市时的年期最少为 3 个月,因此每日的财务费用扣减,实际上相当轻微。
牛熊证即使没有触发收回价,到期了也会被回收

牛熊证的杠杆比率

杠杆比率:当其他因素不变的情况下,每当股票价格变化约为 1% 时,其相应的牛熊证价格的变化幅度。用公式来描述就是:

杠杆比率 = 股价/(牛熊证价格 x 换股比率)

举例说,当 XXXX 股票上升 1%,一只实际杠杆为 20 倍的 XXXX 牛证,权证价理论上升 20%;一只实际杠杆为 15 倍的 XXXX 熊证,权证价理论下跌 15%。

牛熊证牛熊证的杠杆比率股价越接近行使价股价越远离行使价
牛证股价/(牛熊证价格 x 换股比率) = 股价 / [(股价 – 行使价) + 财务费用 x 换股比率]杠杆比率越大杠杆比率越小
熊证股价/(牛熊证价格 x 换股比率) = 股价 / [(行使价 – 股价) + 财务费用 x 换股比率]杠杆比率越大杠杆比率越小
杠杆比率

牛熊证的溢价

溢价是一个证券市场术语,指所支付的实际金额超过证券或股票的名目价值或面值。 而在基金上,则专指封闭型基金市场的买卖价高于基金单位净资产的价值。 我们通常说一支股票有溢价,是指在减掉各种手续费等费用之后还有钱。

牛证溢价(%)= [( 牛证价格 x 换股比率 ) + 行使价 – 相关资产价格]/相关资产价格

熊证溢价(%)= [( 熊证价格 x 换股比率 ) – 行使价 + 相关资产价格]/相关资产价格

牛熊证的影响因素:

  • 相关资产价格;
  • 财务费用;
  • 溢价;
  • 利率;
  • 股息;
  • 市场持仓量和市场供求;

事实上,牛熊证行使价及年期长短,亦会影响到牛熊证价格,但由于这两个条款在产品发行时已经决定,期内不能改变,因此这只会影响产品的定价,属于基本因素而非市场因素。牛熊证价格并无时间值损耗,但财务费用会每日扣减,而且近年利率低企,因此所占牛熊证价格的比例相当低,如非持有长时间,影响极轻微,因此坊间部分有关牛熊证的信息,会指时间对牛熊证价格没有太大影响。

在到期日之前可以影响牛熊证价格的因素:

牛证价格熊证价格
正股价格上升理论上升理论下跌
正股价格下降理论下降理论上升
越接近到期(财务费用会每日扣减)理论下跌理论下跌
财务费用上升理论上升理论上升
利率上升理论上升理论下跌
派息多于预期理论下跌理论上升
影响因素

在到期日之前不能影响牛熊证的因素:

牛证价格熊证价格
与行使价距离越远理论较高理论较高
年期越长理论较高理论较高
隐含波动率几乎不影响几乎不影响
不能影响的因素

牛熊证重仓区

牛熊证重仓区,是根据发行人每日上载至交易所的报告,统计整个市场同一资产牛熊证的所有市场持仓,归纳出最多资金持有的收回价区域。

以恒指牛熊证街货图(又称市场持仓图)为例,不少投资者会视牛证或熊证重仓区,为大市的支持位或阻力位,原因是投资者真金白银买入收回价在若干水平的牛熊证,自然是有信心指数不会升穿或跌穿该水平。但是,支持位和压力位在未来的一段时间内是有可能被打破的。

重仓区相对期指对冲张数的增减,亦反映出投资者加仓或减仓的取向,从中或可推断出资金对后市的看法。

支持位和压力位预估

牛熊证的主要风险

牛熊证的主要风险在于以下几点:

风险解释
强制收回标的股价一旦在观察期触碰收回价,就会被强制收回。
杠杆效果标的股价一旦与投资者的预期相反,则有可能造成比例上的巨大亏损。
到期日一旦牛熊证到期就会被收回,跟股票是不一样的。
流通量注意该牛熊证的流通量,尽量购买交易活跃的牛熊证。
牛熊证的风险控制

牛熊证的买卖差价

牛熊证的买卖差价指的是:发行商最高买入价和最低卖出价之间的差价。这个是投资者的买卖成本。

买入价卖出价
牛证 A0.110 0.112
牛证 B0.1040.108
买卖差价

牛证 A 的交易成本是:0.112 – 0.110 = 0.002,牛证 B 的交易成本是 0.108 – 0.104 = 0.004。说明牛证 A 的交易成本相对牛证 B 的交易成本低。

牛证的锁定收益

如果购买了标的股票大涨,投资者想提前锁定收益,但是又害怕股票大跌造成损失,又害怕股票大涨错过机会。则可以考虑购买牛证:

牛证份数 = 正股股数 x 牛证兑换比率

的牛证数量。如果股票后续大跌,则牛证有收回机制,可以有效控制损失。

熊证的对冲风险

买卖股票的理想与现实

如果购买了标的股票,如果想要减少看错市场的风险,则需要购买

熊证份数 = 正股股数 x 熊证兑换比率

的熊证数量,就能够有效地做对冲。

牛熊证案例分析

以瑞银集团的牛熊证网站为例:可以作为标的股票的包含以下几十种。

可以选择标的股票

香港交易所的股票:

香港交易所股价

标的香港交易所的瑞银 55481 牛证:

瑞银 55481 牛证

标的香港交易所的瑞银 65406 牛证:

瑞银 65406 牛证

香港交易所的瑞银 66253 熊证:

瑞银 66253 熊证

以香港交易所的牛熊证街货图为例:

香港交易所(2021-11-19)的牛熊证街货图

除了瑞银的牛熊证之外,在市面上还有其他发行商的牛熊证可以选择,例如:

  • 港交瑞信二二牛 K.C
  • 港交汇丰一乙牛 M.C
  • 港交瑞银二六熊 B.P

这些文字的含义分别是:

  • 港交:表示标的股票;如果是标的腾讯控股(00700),则会写腾讯;
  • 瑞信,汇丰,瑞银表示牛熊证的发行商;
  • 二二表示 2022 年 2 月到期,一乙表示 2021 年 12 月到期,二六表示 2022 年 6 月到期;
  • 牛表示牛证,熊表示熊证;
  • C 表示 Call,P 表示 Put,分别对应看涨期权和看跌期权。

备注:以上所有内容不包含任何投资建议,仅供参考。

参考资料

  1. 瑞信资料:https://warrants-hk.credit-suisse.com/sc/tutorial/cbbc
  2. 瑞银资料:https://warrants.ubs.com/gb/education/cbbc_education
  3. 老虎证券资料:https://www.tigersecurities.com/help/detail/79776806

芝加哥枪声之后,妈妈决定冒着疫情风险去美国接他回家

打开凤凰新闻客户端,搜索「在人间」并关注  

11月7日,四川乐山。从美国芝加哥寄来一个快递,那是一盒香水,是在芝加哥留学的24岁的郑少雄寄给母亲的。一个看不懂的英文牌子,母亲平常不舍得买。郑少雄用节省下来的生活费买了一瓶,算好时间,请快递员正好当天送达。那天,是母亲57岁生日。

郑少雄从未忘记过母亲的生日。自2015年到香港大学读本科起,到殒命芝加哥枪击案之前,每天晚上十点半,他都会打来电话,道一声晚安,以平复母亲的牵挂。

郑少雄和他的家,是无数中国普通留学生家庭的缩影:母亲是一家当地医院的普通职工,家庭收入不高。她节衣缩食,拼尽力气想帮助儿子有一个更好的未来。

芝加哥秋天的冰雨骤然击破了这个家庭的梦想。美国时间11月9日下午,一名持枪的歹徒,在芝加哥大学主校区附近的人行道上,用枪击中了郑少雄的胸口。7小时后,可怕的消息在互联网上飞速传播。而远在四川乐山家里的母亲,因为联系不上自己的儿子,开始浑身发抖。

本文的叙述者金谷,是和郑少雄一起长大的“兄弟”。“他妈妈和我妈妈是初中和高中时的好闺蜜。我们从小一起玩耍,一起求学,情同手足。”当噩耗传来,金谷的母亲一直守在郑少雄母亲的身边,陪伴着她共度难关。

在新冠疫情肆虐的当下,这起悲剧仍然牵动了中美两边无数人的心。中国外交部和众多网民对郑少雄的命运倾注了极大关注,美国方面也将开通绿色加急通道办理,就在今天(11月14日)下午,他的母亲将启程,飞往上海面签,然后前往芝加哥,亲自接儿子回家。

郑少雄出游照片

以下是金谷的讲述。

是的,领事馆打电话来了!

2021年11月10日,一个再普通不过的星期三。一早我来到公司,开始工作。10点37分时,我妈妈突然在家庭群里发了一个消息:“芝加哥大学发生枪击案,一个24岁学统计的娃儿遭了(枪击),联系不上三同(郑少雄小名),他妈妈在发抖,我正在往三同妈妈家里跑!”

我看到这个消息,心里一紧,但随即略微放宽了心。因为在我印象中,三同非常谨慎,很有安全意识。他刚去芝加哥大学读研究生,就在我们的家庭群里分享了一个实时监控当地街区发生枪击情况的app,让我们放心,说一切情况都在他把控之中。

到 11点,我参加一个线上会,看到媒体已经开始报道这个事件了,但只有一个通告,没说受害者是谁。我赶紧查芝加哥中国领馆,以及芝加哥大学校警的电话,让妈妈们去打。那时,我心里还认为,“24岁”“统计学”这两个特征可能只是巧合,三同依然安好。

11点49分,我妈在群里发了一个消息:“是的,领馆打电话来了。”

“天呐!”我一下子懵了,立刻离开会议室,给我妈打电话,电话那头清晰地传来啜泣声。从这一刻开始,我们的天都塌了。我在公司的电话隔间里脑子完全空白,只觉得狭小的电话室在不断缩小,缩小,使劲挤压着我的身体,我无法呼吸,无法思考,无法表达。

这个“是的”,好像一阵风一样吹过去了,而我还是不能相信它是“真的”。直到电话再次响起,我家人的哭声从电话里再度传来。我才“真的”接受了这个消息,嚎啕大哭。

泪眼模糊中,电脑上的时间显示是中午12点31分。一种更猛烈的悲痛捶打着我的胸口--从2015年到港大开始离家求学,每天晚上22点30分,三同都要给妈妈打电话,分享当天的学习生活,道一声晚安。而此时此刻,正是芝加哥时间,三同平常给妈妈道晚安的时候。

郑少雄与妈妈

对他来说,“学霸”的标签太单薄了

我和郑少雄在娘胎中就相识了。他妈妈和我妈妈是初中和高中的好闺蜜。我们从小一起玩耍,一起求学,情同手足。

这些天,我看到很多报道,都说三同是“学霸”。在我心目中,用“学霸”这个词来形容三同真是太简单了,这个标签太单薄。对我来说,更重要的是,从小到大,我都能感受到他对身边的人以及这个世界,怀抱并展示出的极大善意。

郑少雄小名叫三同,和麻将里的“三筒”同音。我们的老家在四川乐山。每次假期回去,我们最大的乐趣就是玩麻将。每天晚上,不论白天做啥,晚上都会聚在我家阳台的小餐桌上,把桌面翻过来打麻将。

牌局的成员一般是5个人,两位妈妈和我们三兄弟(我有一个孪生哥哥,我们仨称为“三兄弟”)。三同是麻将高手,他能用统计理论来算牌,我们开玩笑说,他杀鸡用牛刀。他说,这是学以致用。麻将打1块钱的,每天都打到很晚,大家乐此不疲。三同常常是赢家,赢了的钱就请我们去楼下的烧烤店搓一顿。听说三同打牌厉害,家里自居高手的三大姑八大姨都要来切磋一把,阳台到晚上常常像是擂台。擂主不易撼动,但总是充满了欢声笑语。

2000年,我们三兄弟在乐山太阳岛游玩。下图的最前面就是郑少雄。

小学的时候,三同竞选班长,事前问妈妈可不可以自己给自己投票,妈妈说,只要你真心想为同学们做事情,哪怕别人一票不给你投,你都应该给自己投一票。选举的结果是全票通过。老师告诉妈妈,带了十多年的班级,三同是唯一一个62票全票当选班长的孩子。

初中时,放学在操场打球,快结束时,有个姓张的同学说,谁帮他上楼拿书包,就给谁5块钱。其他同学都没反应,三同却说他去拿,领走了同学的5块钱。我们还纳闷这不像他的风格。第二天,班主任老师出乎意料地在课堂上表扬了张同学。我们才知道,三同把那5块钱以张同学的名义捐给班里了,换了一个新拖把。

现在回想起来,初中的那段岁月特别单纯开心。我们那时候喜欢聚在一起研究电脑。有一次三同家换了新电脑,赶紧约在一起,下载好“孤岛危机”准备体验一番。三同妈妈要去医院值夜班,临走给我们说:“你们仨聚一起,随便咋个耍!”

这下我们可玩美了。“孤岛危机”是单人游戏。我们坐电脑前,轮流操作,另外两人参谋指挥,转眼间从下午到了晚上,我们调暗灯光继续奋战,直到累到不行,才去睡觉。睡觉时想起游戏里的恐怖,背后发凉,三同说,没事儿,熟练地去锁好房门,我们仨挤在一起,没多久就进入了梦乡。

那时,三同的妈妈在医院,经常值夜班。三同很小就自己照顾自己。我虽然比三同大两岁,但这种体验对童年的我来说反而没有。

高中时,我们从乐山相继考入成都。三同就读成都七中林荫校区,我在成都九中宁夏校区,学校相隔很近,周末我上补习班就在七中旁边,下了课就到三同的出租屋,吃三同妈妈和姨婆做的美食,或者他们母子到我们的出租屋来聚一聚。

我们在出租屋里挤着睡,聊一晚上的天,然后开始下一周紧张的学习生活。记得他要准备竞选“成都七中形象大使”时,我们拿着借来的高级相机到七中去,各种摆拍,用当时的小儿科水平努力想把他拍得高大上一些,最终他也凭借品学兼优和阳光帅气的外形,还有钢琴、书法、乒乓球的出色才艺,当选成都七中的形象大使。

2013年,在成都出租屋内学习(左一为郑少雄)。

在高手如云,竞争激烈的成都七中,三同也常独占鳌头,他学习从不蛮干。不熬夜,不刷题,往往是把一个题目从不同的角度钻透,然后举一反三,一通百通,学得轻松有趣,还可以腾出时间和精力,给其他同学传经送宝。

我记得,他曾利用周末的时间买了一些白折扇,然后在校园里面摆摊,哪个同学希望他在折扇上写什么内容,他就写。除去折扇的成本十块钱之外,多收五块钱。这样赚了几百块钱,全部捐做班费。我妈妈当时还出“高价”二十元,请他写了一把扇子。

在多姿多彩的校园生活背后,是三同妈妈每周五下班后,从乐山乘坐两个半小时的大巴车,到成都的出租屋,给三同做点好吃的家常菜,补补营养。然后周日晚上再坐大巴车赶回乐山,三年下来,车票累成了一座小山,足足有数百张。

 2014年,在成都七中校园。

出事前一周,三同被拍到一张照片。照片上的他正在打乒乓球,看起来神采飞扬。其实,他是个性格内向的人。

有件小事我记得很清楚,小学时学乒乓球,球室在教学楼顶,夏天十分闷热,妈妈去球室接他,发现他站在球台旁帮人捡球,满头大汗,问他是不是不喜欢打球啊,他说他特别想打,但还没学会,打不过别人。在妈妈鼓励下,他才慢慢上手。后来,他越打越好,成为他拿手的才艺之一。

2021年11月3日,在芝加哥参加乒乓球比赛。

一边写下这些往事,一边泪水不断涌上眼底。发生在我们生命中的这些小事情,仿佛就在昨天,可是残酷的现实告诉我,我和三同已经是天人两隔。

2017年三兄弟同游西昌
2015年三兄弟同游香港赛马会

怕花钱,他在香港一年没买西瓜吃,回来才大吃一顿

三同比我高考晚一年,香港大学是我们共同的向往,我未能如愿。三同不出意外取得651分的成绩,实现了我们兄弟共同的愿望。大家商议志愿填报的微信群,群名也因此改成了“圆梦香港”,群友有三同、他妈妈、我妈妈以及我的孪生哥哥。六年来这个群一直很活跃,虽然天各一方,但一直在分享着生活的点滴和对彼此的祝愿。

港大高额的学费,让三同家压力山大。三同妈妈是医院普通职工,但是她绝不想因为家庭经济原因,让出类拔萃的孩子不能飞得更高。

自从上了港大,他妈妈就开始节衣缩食,变卖了房产,甚至不得不向亲朋好友筹借学费。了解三同的亲友,都愿意帮助这么优秀的孩子一臂之力,尽管如此,三同妈妈的衣服,还是从原来的几百元到后来的几十元,家里常年只开一盏灯。

和妈妈相依为命的三同,自己也在想办法。他通过网络了解到宋庆龄基金会可以为他这样的学生提供帮助,就悄悄向基金会申请,最终为自己争取到了宝贵的奖学金。一切都搞定之后,他才把好消息告诉妈妈,让妈妈喜出望外。

郑少雄获得宋庆龄基金会奖学金
郑少雄获得香港政府奖学金
郑少雄在美国大学生数学建模竞赛获得O奖(特等奖),为该大赛的最高奖项。

为了尽可能减轻家里的经济负担,三同在学校尽量节省各种开支。因为觉得香港的西瓜太贵,他整整一年没有尝过西瓜的味道,放假回来,放开了大吃一顿!

他还下决心提前完成学业,帮妈妈缓解学费的压力。他几门功课同时修习。高铁,飞机,等公交车的站台,餐馆的饭桌,随处都是三同的自修室。

在港大求学期间,因为出众的表现,他当选为香港大学学生大使,接待到港大访问的社会各界人士,也因此获得了港大每年出去看世界开眼界的机会。一边上学,三同一边总结了自己的一些学习经验,和学姐合作,写成《做事的逻辑》一书,由四川大学出版社出版。这本书的版权费,对他们家虽是杯水车薪,也多少缓解了一点学费的压力。

最终,他提前一个学期,以一级荣誉从港大毕业,是港大当之无愧的杰出校友,也是我们一家人心目中的骄傲。

只是,万万没有想到,再一次看到“一级荣誉”这四个字,竟是在香港大学校长张翔教授的悼念信中。

香港大学统计学本科毕业之后,三同想继续深造,他拿到了世界一流学府芝加哥大学的研究生offer,芝大的统计学专业在世界上都是领先的。

像从前一样,他也尽力争取奖学金和各种打工机会。开学没几个月,新冠疫情爆发,三同只能在学校门口租的房子上网课,却依然把自己的生活安排得井井有条。哪怕是给自己做一份简单的早餐,他也会有精致的摆盘,拍张照发给妈妈,告诉她自己过得很好。邻居间,也留下了这个年轻的学生爱做饭的印象。

郑少雄在芝加哥学习自制月饼,分享给邻居同学。
2021年郑少雄生日,和母亲的对话。

我们知道芝加哥的治安不好,总牵挂着他。每当新闻里报道芝加哥又发生了枪击案之后,他总会晒出一个app,上面显示着枪击案的信息通报,让我们不用担心,他有足够强的安全意识,一切尽在掌控之中。

但妈妈又怎能不担心呢?三同妈妈虽然每天都牵挂着儿子,却很少告诉三同,去年过年回家的时候,我和他妈妈一起在公园散步,看到蹒跚学步的孩子时,他妈妈会提起三同学步的样子;在成都的街头看到穿着七中蓝色校服走过的少年时,会恍惚觉得是他的身影;甚至晚上回家坐在客厅时,会觉得三同随时会从房间里走出来……她关注芝加哥的天气,关注芝加哥的新闻,更在有暴力事件发生时寝食难安……但她每次跟儿子联系,总是表达出鼓励和祝愿。今年9月当她再次听到枪击案新闻的时候如是说:

每当大洋彼岸的芝加哥,传来枪击案的消息,郑少雄的母亲只能用文字表达牵挂。

今年夏天他硕士学位答辩结束,继续申请博士学位本来是他的心愿,也应该能够达成。但他不想让已经退休的妈妈继续生活在压力中。

三同妈妈身体并不好,在他小学时,意外脚踝骨骨折,脚上上了4颗螺钉,用了5根钢针固定,做了两次手术,初中时因为气胸曾被抢救。在港大读书期间,她又因为急性胰腺炎而再次做手术,随着年龄的增大,妈妈又得了高血压等慢性病,这一切都是三同的牵挂,最终他决定放弃读博,选择就业。他想在美国先锻炼一下,积累经验,然后回国发展,还清债务,孝敬妈妈。

郑少雄照顾母亲的照片。

可惜这样一个心怀善意,聪慧纯洁的生命,冤死在罪恶的子弹之下。

噩耗传来的前三天,他给妈妈寄来了生日礼物

三同对妈妈特别好。去美国之前,他把家里的每一个插座都换成开关式,方便妈妈使用,还给妈妈买了分药盒,以免她忘记吃药等。每个母亲节,妈妈的每个生日,三同都会用自己节省的零花钱准时给妈妈送礼物。

今年11月7日,像以往一样,妈妈收到了儿子从美国算好时间准时寄到的礼物,是一瓶香水,妈妈舍不得买的香水。那天她很开心,在群里晒了儿子的礼物。没想到,三天以后,三同就不在了,这瓶香水也成了这一生她收到的儿子最后的生日礼物。

2021年11月7日,郑少雄母亲和我母亲的聊天记录。

悲剧发生的11月10日早上,三同妈妈给我妈妈发来微信,说:学校出事了,联系不上三同,那时候她浑身发抖。从11点到11点40分,他妈妈一直焦急地在各种留学群里询问,拜托各种朋友联系芝加哥官方。11点50分,手机上突然显示领事馆来电。

我妈妈知道大事不妙,当场就崩溃大哭。接起电话,传来了一个略带港澳腔的声音:“你是不是郑少雄妈妈?你的身边有没有亲人?郑少雄出事了,现在在医院里面,已经停止了心跳……”

从11月10日到现在,各种朋友、同学、同事都来慰问,亲人们也第一时间来到了三同妈妈的身边。在外人看来,三同妈妈表现出了一种出乎意料的坚强,有条不紊地处理各种事务。但我们知道,这份坚强却是极其的脆弱,因为这是妈妈为了能再见到三同,在强力支撑。三同可是他妈妈的一切呀!就在9月份,三同刚完成研究生学业,即将开始新生活的,三同妈妈如是说:

当希望变成绝望,这是何等的灾难;当三同妈妈做出要冒着疫情赴美接儿子回国的决定后,用自己的血肉之躯去面对这份绝望的时候,又是何等伟大的母爱。这条回家路不好走,路上势必还会有重重困难。作为三同的兄弟,现在也是他妈妈的“儿子”。如今,我最大的心愿就是帮助妈妈走过这一关,以告慰弟弟三同的在天之灵。

就在今天(11月14日),三同妈妈将飞往上海,面签,然后经底特律,到芝加哥,去接回儿子。外交部和网民对三同的命运都倾注了极大的关注,美国领馆也将开通绿色加急通道办理。希望三同这条艰难的回家路,能够多一点好运和顺利。

斯人已逝,生者何堪。三同的回家路很长,他妈妈的下半生也很长,最后,由衷地希望三同妈妈的下半生能感受到这个世界的最大善意。

注:口述内容和文中图片均得到郑少雄家人独家授权

凡注明“在人间Living”或“原创”来源之作品(文字、图片、音频、视频),未经凤凰网或在人间living栏目授权,任何媒体和个人不得转载 、链接、转贴或以其它任何方式使用;已经由本栏目、本网授权的,在使用时必须注明“来源:凤凰网在人间Living”或“来源:凤凰网在人间工作室”。违反上述声明的,本栏目将追究其相关法律责任。

期权入门知识整理(一)

期权的基础知识

期权被定义为“在约定日期之前以固定价格购买(或者出售)资产的权利,而不是义务”。

期权的定义主要包含以下四个方面:

  • 约定日期:每个期权都有一个到期日,通常为具体的某个月份或者某一天;
  • 固定价格;
  • 购买或者出售;
  • 权利,非义务。

期权类型:

  • 看涨期权(call):具有买入权利的期权,是指在约定日期之前以固定价格购买资产的权利;
  • 看跌期权(put):具有卖出权利的期权,是指在约定日期之前以固定价格出售资产的权利。

期权的分类:

  • 美式期权(American-Style Options):允许期权购买者在到期日之前的任何时间行使期权;
  • 欧式期权(European-Style Options):不允许期权购买者在到期日之前行使期权;

在这里,通常使用的都是美式期权;

最简单地,有四种基本的期权策略:

  • 买入看涨期权(Long Call):认为股票行情会上涨;
  • 卖出看涨期权(Short Call):认为股票行情会下跌;
  • 买入看跌期权(Long Put):认为股票行情会下跌;
  • 卖出看跌期权(Short Put):认为股票行情会上涨;
策略收益风险盈亏平衡点
买入看涨期权策略无限支付的权利金行权价加上权利金
卖出看涨期权策略收到的权利金无限行权价加上权利金
买入看跌期权策略行权价减去支付的权利金支付的权利金行权价减去权利金
卖出看跌期权策略所收到的权利金行权价减去权利金行权价减去权利金
四种基本的期权策略

备注:

  • 买入看涨/看跌期权的风险有限:指的是最大损失就是支付的权利金;
  • 卖出看涨/看跌期权的风险无限:指的是无穷大;

用图像来描述四种基本的期权策略。黑点表示行权价,横线纵轴 = 0 表示盈亏平衡,纵轴 > 0 表示利润,纵轴 < 0 表示损失。横轴表示标的资产价格。

分别是:Long Call,Long Put,Short Call,Short Put
预计股票方向期权策略
认为股票未来会涨买入看涨期权 + 卖出看跌期权
认为股票未来会跌买入看跌期权 + 卖出看涨期权
简单策略组合

期权的希腊字母(Greeks):

希腊字母定义性质
Delta衡量期权价格相对标的资产价格变动的敏感度,数学公式:Delta = 期权价格的变化 / 标的资产的变化。看涨期权的 Delta>0,看跌期权的 Delta<0;
看跌期权的 Delta = 看涨期权的 Delta – 1。
Gamma衡量期权价格相对于标的资产价格变化速度(即加速度)的敏感性。Delta 的变化率。
Theta衡量期权价格相对于到期时间变化的敏感性,通常都是负数。当期权是平值和距离到期日不足30天时,时间衰减最快。
Vega衡量期权价格相对于资产波动率变化的敏感性。历史波动率
Rho衡量期权价格相对于无风险利率变化的敏感性。利率
Zeta衡量期权价格每变动 1% 时,隐含波动率的变化百分比。
Greeks

影响期权变化的部分因素:

如果看涨期权价值将看跌期权价值将
股票上涨上升下降
股票下降下降上升
股票波动率上升上升上升
股票波动率下降下降下降
随时间推移下降下降
影响期权价值的部分因素

短期期权和长期期权(Long-term Equity Anticipation Securities,简称 Leaps):两者从定义上来看没有本质区别,但是其 Greeks 有着明显的差异性。

长期看涨期权定价曲线(行权价 80)
期权时间衰减的百分比

相对短期期权而言,

  • 长期期权因时衰减是不快的;
  • 买入长期期权的时机把握并不需要像买入短期期权那么精确;
  • 长期看跌期权对股票运动的反应远没有短期看跌期权那么敏感;

长期期权策略:代替买卖股票。

  • 买卖长期期权而不是买卖普通股股票;
  • 使用长期看跌期权来保护已经持有的股票;
  • 使用长期期权而不是卖空股票;

价差策略

价差类别定义
垂直价差(vertical spread)到期日相同但是行权价不同的期权组合。
水平价差(horizontal spread)到期日不同但是行权价相同的期权组合。
对角价差(diagonal spread)垂直价差和水平价差的结合,到期日和行权价都不同的期权组合。
价差的种类

垂直价差策略(vertical spread)

垂直价差策略股票预期具体操作风险与收益
牛市看涨期权垂直价差策略牛市在到期日相同的前提下,买入一份行权价较低的看涨期权,同时卖出一份行权价较高的看涨期权。都有上限
牛市看跌期权垂直价差策略牛市在到期日相同的前提下,买入一份行权价较低的看跌期权,卖出一份行权价较高的看跌期权。都有上限
熊市看涨期权垂直价差策略熊市在到期日相同的前提下,买入一份行权价较高的看涨期权,同时卖出一份行权价较低的看涨期权。都有上限
熊市看跌期权垂直价差策略熊市在到期日相同的前提下,买入一份行权价较高的看跌期权,同时卖出一份行权价较低的看跌期权。都有上限
垂直价差策略

水平价差策略(horizontal spread),也称为时间价差或者跨期价差。

水平价差策略股票预期具体操作风险与收益
牛市看涨期权跨期价差策略牛市在行权价相同的前提下,卖出一份近期的看涨期权,同时买入一份远期的看涨期权。在近期到期日时,都有上限。
熊市看跌期权跨期价差策略熊市在行权价相同的前提下,卖出一份近期的看跌期权,同时买入一份远期的看跌期权。在近期到期日时,都有上限。
水平价差策略

反向跨期价差策略:跟跨期价差的买卖方向相反,但是不常用。

  • 在行权价相同的前提下,买入一份近期的看涨期权,同时卖出一份远期的看涨期权;
  • 在行权价相同的前提下,买入一份近期的看跌期权,同时卖出一份远期的看跌期权。

对角价差(diagonal spread)

对角价差策略股票预期具体操作风险和收益
牛市看涨对角价差策略牛市卖出一份近期的行权价较高的看涨期权,买入一份远期的行权价较低的看涨期权。在近期到期日时,都有上限。
熊市看跌对角价差策略熊市卖出一份近期的行权价较低的看跌期权,买入一份远期的行权价较高的看跌期权。在近期到期日时,都有上限。
对角价差

比率价差策略

可以通过看涨期权或者看跌期权来合成比率价差策略。

比率价差策略股票预期具体操作风险和收益
看涨期权比率价差(ratio call spread)牛市(中性)在到期日相同的前提下,买入 一份行权价较低的看涨期权,卖出 k 份行权价较高的看涨期权(k>1)。收益有限,风险无限。
看跌期权比率价差(ratio put spread)熊市(中性)在到期日相同的前提下,买入 一份行权价较高的看跌期权,卖出 k 份行权价较低的看跌期权。收益有限,风险无限。
比率价差策略

比率选择的方法:

  • 比率价差同卖出比率基本相似:买入实值的看涨期权;
  • 比率价差应该用收入来建立,保证下行方向没有风险;
  • 比率价差应该用 delta 值来建立,也称为 delta 价差;

波动率策略

预期股价有大幅波动,但是不确定上涨还是下跌。

波动率策略股票预期具体操作风险和收益
跨式价差大幅波动在到期日相同的前提下,同时买入行权价相同,一份看涨期权和一份看跌期权。风险有限,收益无限。
宽跨式价差大幅波动在到期日相同的前提下,同时买入行权价不同,一份看涨期权和一份看跌期权。要保证看涨期权的行权价高于看跌期权的行权价。风险有限,收益无限。
条式策略中性到熊市看跌在到期日相同的前提下,买入两份平值看跌期权,一份平值看涨期权,比例为 2:1 的关系。风险有限,收益无限。
带式策略中性到牛市看涨在到期日相同的前提下,买入两份平值的看涨期权,一份平值的看跌期权,比例为 2:1 的关系。风险有限,收益无限。
波动率策略

区间震荡策略

预期股票会在一个区间范围内波动,有明显的支撑位和压力位。

区间震荡策略股票预期具体操作风险和收益
看涨期权蝶式策略中性在到期日相同的前提下,买入一份行权价较低的(实值)看涨期权,卖出两份行权价居中(平值)看涨期权,买入一份行权价较高(虚值)看涨期权。行权价之间应该保持相同差额。收益有限,风险有限。
看跌期权蝶式策略中性在到期日相同的前提下,买入一份行权价较低的(虚值)看跌期权,卖出两份行权价居中的(平值)看跌期权,买入一份行权价较高的(实值)看跌期权。行权价之间应该保持相同差额。收益有限,风险有限。
看涨期权鹰式策略中性在到期日相同的前提下,买入一份行权价较低的(实值)看涨期权,卖出一份行权价次低的(实值)看涨期权,卖出一份行权价次高的(虚值)看涨期权,买入一份行权价较高的(虚值)看涨期权。行权价之间应该保持相同差额。收益有限,风险有限。
看跌期权鹰式策略中性在到期日相同的前提下,买入一份行权价较低的(虚值)看跌期权,卖出一份行权价次低的(虚值)看跌期权,卖出一份行权价次高的(实值)看跌期权,买入一份行权价较高的(实值)看跌期权。行权价之间应该保持相同差额。收益有限,风险有限。
蝶式和鹰式策略

参考资料

  1. Cohen, Guy. The bible of options strategies: the definitive guide for practical trading strategies. Pearson Education, 2005.
  2. McMillan, Lawrence G. Options as a strategic investment. Penguin, 2002.
  3. Natenberg, Sheldon, and Jeffrey M. Cohen. “Option volatility & pricing: advanced trading strategies and techniques.” (1994): 51.

随笔(十二)— 《股票大作手操盘术》- 华尔街传奇操盘手的交易思想和内心世界

近日,在知乎的一次课程上偶然听到了华尔街大亨 Jesse Livermore 这个名字,对金融不甚了解的我去网上查了一下这位大神的传奇人生。

杰西·劳伦斯顿·利弗莫尔(英语:Jesse Lauriston Livermore,1877年7月26日-1940年11月28日)是美国华尔街大亨,被当年的《时代》杂志形容为“最活跃的美国股市投机客”(the most fabulous living U.S. stock trader)。

Jesse Livermore

杰西·利弗莫尔生于马萨诸塞州,自小家境穷困,父亲以务农为生。利弗莫尔在学校很用功,一年内完成三年课业,父亲却要他辍学。13 岁带着母亲给的 5 美元,在波士顿的“潘伟伯公司”(Payne Webber)当擦黑板小弟,利弗莫尔对数字过目不忘,熟记各种股市数据,研读行情。1893年,利弗莫尔 16 岁初涉股市就取得成功,分到 3.12 美元的利润,等到赚 1000 美元后,他辞掉工作,专心买卖股票,以放空出名,有“华尔街大空头”之称。 在 20 岁前,他凭精湛的预测股价走势的技巧,在赌博股票价格波动的赌场里赚钱,许多庄家因而损失惨重,把他拒于门外,他曾多次假手于朋友助他买卖交易,但最后都多次败露给发现;利弗莫尔遂前往纽约,操作纽约证券交易所(New York Stock Exchange)的股票,但一开始投资并不顺利,半年内输光家产。最后他只得向经纪公司借 500 美元,重回波士顿,再赚回 10000 美元。

1901 年,美国股市大涨,利弗莫尔在纽约买入“北太平洋公司”的股票大赚,财产爆增至五万美元。但不久,利弗莫尔再次输光。1907 年 10 月24 日大赚 300 万美元,并引发华尔街股市大崩盘,银行家 J.P.摩根(J.P Morgan,摩根公司创办人)曾致电利弗莫尔请求他停止放空,告诉利弗莫尔恐怕整个股票市场即将被摧毁。随后华尔街股市因利弗莫尔大手平仓而止跌,他感觉自己“那一刻就像皇帝”。利弗莫尔成了华尔街的知名人物。利弗莫尔曾有句名言:“华尔街不曾变过。口袋变了,股票变了,华尔街却从来没变,因为人性没变。”并且认为“投资人必须提防很多东西,尤其是自己。”他随时自省,因为“市场永远不会错,只有人性会犯错”。1908年,他听从棉花大王珀西·汤玛士(Percy Thomas)建议,做多棉花期货,结果惨遭套牢。短短几周内,他宣布破产,还负债 100 万美元,此时罹患忧郁症。 第一次世界大战爆发,利弗莫尔惨赔,积欠 100 万美元以上。1917 年 4 月,利弗莫尔在市场上开始告捷,偿还所有债务。1929 年,华尔街股灾前,利弗莫尔占进先机,预先大手放空所有股票。后大崩盘其间,累积赚取超过一亿美元,当时美国一年税收仅 42 亿美元,当时利弗莫尔拥有全纽约最漂亮的办公室,位于第五大道 730 号,还有私人专用电梯。

利弗莫尔高度自律,他晚上 10 点就寝,早上 6 点起床,开始大量阅读欧洲、美国各地报纸。他尽量少收信,也尽可能不回信。为了掌握行情,他在曼哈顿豪宅、度假小屋、旅馆,以及豪华游艇上都装了股价电报机。他喜欢美女,曾结婚三次,还养了许多情妇。1923 年新年前的星期五,利弗莫尔带着公事包,包内装着一年内所有交易纪录与笔记,在银行经理陪伴下,走进银行金库。接下来的三天二夜,利弗莫尔在五千万的纸钞堆里,仔细检讨过去一年某些交易失败的原因。待到星期一早上他离开金库时,他会在身上的口袋塞满钞票,并在两个礼拜内用掉这些钞票。

利弗莫尔 1900 年第一次结婚,后来炒股破产,妻子 Netit (Nettie) Jordan 不愿变卖首饰支持他炒股,两人感情失和,终于在1917年离婚。他的第二任演员妻子温德特(Dorothy Wendt)嗜酒、花名在外,最后温德特跟他离婚,还把他的财产挥霍一空,又在一次酒醉后,对长子开枪,造成长子残废。家庭生活的失衡,使他因为私人生活问题而致心灰意冷,他多次破产,但也多次从破产中崛起。1934 年 3 月 5 日第四次破产,患有深度抑郁症。他的儿子说服他写书,借此鼓舞情绪,1940 年 3 月,利弗莫尔出版《股票作手杰西·利弗莫尔尔操盘术》(How to Trade in Stocks),但书卖得不好。同年11月他在饭店用晚餐时,留下遗书给第三任妻子Harriett Metz Noble,然后在洗手间举枪自杀。 利弗莫尔的遗书:

“ Cant help it. Things have been bad with me. I am tired of fighting. Cant carry on any longer. This is the only way out. I am unworthy of your love. I am a failure. I am truly sorry, but this is the only way out for me. (忍受不了,所有事情对我来说都很差。我厌倦了抵抗,不能够再坚持下去,这是唯一的出路!我不值得你去爱,我是个失败者,我…真的很对不起,但这个方法是我唯一的出路。) ”

生命中最后一年的长期抑郁症应该是自杀的主要原因。

这位华尔街的传奇大亨的书籍《How to Trade in Stocks》至今被奉为经典之作。下面摘选书籍中部分经典交易法则。

从宏观到微观进行交易的原则 — 关注市场大趋势

原则一,在进行交易之前,投机者必须了解现在的整个大势 — 也就是市场的最小阻力线。他必须搞清楚,现在这条最小阻力线是向上的还是向下的,且这一原则适用于个股和整个大势。在交易之前你所要明白的最基本的事情就是整个大势何去何从,是向上,向下还是震荡。在最终决定交易之前你必须要搞清楚这一点。如果现在整个大势对你不利,那么你现在在做交易就是非常吃亏的 — 要记住,你应该跟随趋势,顺风而行,千万不要逆市操作,而最重要的一点是 — 千万不要跟市场争执!

原则三,只交易强势板块中的强势股票。在任何工业板块中,只买最强势的龙头股

原则六,在你买股票之前,在你买股票之前,你必须提前清晰地想好,如果股票走势跟你对着干,那么什么时候你必须清仓,也就是设定一个明确的止损点。更关键的是,你必须遵守事先制定的规则。

原则七,市场里成功的交易员只应该参与那些胜率最高的投机机会。一开始先用小头寸试单,看看你的判断是否正确,之后再不断加码。千万不要一次性建仓 — 用试单来确认判断和时机,同时寻找最小阻力线。试单的方法同样也是”资金管理“的重要组成部分。

原则八,如果出现了”出人意料“的情况,交易员必须马上作出反应。这种情况是你根本无法预测的。如果前面出现一个送钱的机会,那就抓住吧。如果出现一个坏消息,那就赶紧跑,千万不要回头看,也不要犹豫 — 赶快清空自己的头寸。


资金管理的原则

原则一,设定止损点!千万不要亏掉 10% 以上的本金!如果你亏掉了 50%,你需要赚 100% 才算回本。

原则三,每隔一段时间就把账面盈利变现。把你的盈利中的一定比例从市场中提取数来,放在一个安全的地方。

原则四,你必须仔细检查并且理解时间的含义。

时间并不是金钱,很多时候你就应该把钱从市场里面拿出来,放在一边。时间是时间,钱是钱。这个时候你没有把钱挥霍掉,等将来时机成熟你就可以再拿来投资,也许会大赚一笔。所以你要有耐心,耐心是成功的关键。千万不要凡事匆匆忙忙的。

原则五,千万不要急。那些成功的投资者不会时时刻刻都在市场里面投资的。很多时候你都应该完全持有现金。如果你不确定市场的走势,那么就待在场外吧,等下一波行情确认了之后再行动。

原则七,将亏损的股票卖掉。如果所有的风险因素都对你有利,就让赚钱的股票奔跑。

情绪控制的原则

原则一,情绪控制是市场中生存的最关键因素。

原则六,小道消息有各种各样的来源 — 可能来自某个亲戚,你的爱人,或者是一个深度参与了某项投资的朋友,这个朋友希望有钱你也一起赚。不过小道消息也可能来自不发推销员或者罪犯。你要记住:

所有小道消息都是非常危险的—所以最好不要去打听小道消息。

原则八,必须时刻留心你的情绪 — 千万不要因为赚了钱就洋洋自得,或者因为亏了钱就非常沮丧。你必须要达到那种“泰然自若”的状态,能够掌控自己的行动。

原则十,你必须时刻准备好一套投机方法,就像是一个攻击计划。同时,你必须严格按照计划行事。千万不要经常变更自己的计划。找到一个从情绪上和思维方式上跟你吻合的交易模式,并且坚持按照这种模式去交易 — 也就是说,根据适合你自己的方法交易。

原则十二,准备好孤军作战。拿自己的钱投资,就要自己做决定。你交易的时候要保密,不要到处跟别人说。不要公开你赚的钱或者亏的钱。

原则十三,成功的投资者不会每时每刻都在市场里面投资 — 很多时候你就是应该完全清仓,持币观望。如果你不太清楚市场的走向,那就请你暂且等待吧。

原则十五,要想成为市场里面的超级交易员,你需要把以下四点做成极致:
1. 观察力 — 能够不佳偏见地观察市场里面的情况;
2. 记忆力 — 要能够准确客观地记住发生过的重要事件;
3. 计算能力 — 要对数字敏感,跟数字打交道感觉非常舒服;
4. 要有经验 — 能够记住教训,从过去的经验中学习;

之前的经验造就了我们。

原则十七,要随时当心自己的无知 — 你必须要不断地研究和学习时长,不要马马虎虎,而是要深入下去,要做到学富五车。虽然股票市场看上去赚钱又快又容易,很多人因此就傻乎乎地把钱投入到股市中,乱来一起,他们做任何别的事情的时候都不会这样不小心的。那么无知的反面就是渴求知识了。确实,知识就是力量。

原则二十,如果行情走势跟你买入卖出的决定不相吻合,那么久等待一下,直到你与它“吻合”为止。千万不要歪曲行情,自欺欺人,给自己的头寸找借口。

原则二十一,不要接受或者传播小道消息。

原则二十三,千万不要坚持持有下跌的股票,不要“炒股炒成股东”。

原则二十四,千万不要在炒股回调的时候买入,不要再反弹的时候做空。

原则二十六,投机也是一门生意,就像所有其他的生意一样,想要成功,就必须刻苦努力,非常勤奋才行。

随笔(十一)— 一个勤奋的人是如何渐渐的丧失斗志的?

一个本科生 XX 毕业之后充满理想的选择攻读博士学位,导师给他描绘了一个宏伟蓝图,做出来必定发 Annals of Mathematics / Invention Mathematicae,所做的每一件事情都可以推动学科的发展和进步,成就感和使命感都爆棚的那一种。

科研之后 XX 每次需要和导师探讨问题的时候,导师总说这个问题该自己思考,多思考才能有结果。然后读博三年期间导师几乎没有任何过问,事后解释起来要给学生独立发展的机会。第三年结束之后学生 XX 拿出来一个结果给导师,导师说不能发表,也不准挂 arxiv,继续往下做就行了。结果一年后看到导师的另一位学生在某杂志上发表了相同的结果,期间 arxiv 上没见过任何预印稿。

事已至此,XX 毫无办法,只好继续做出来进一步的结果。此刻,导师又说不忙发表,我这里会有博士后的位置,到时候再发表就行。于是学生 XX 就只好安心写毕业论文,等写好毕业论文提交系统之后,导师又说我这里的博士后没有了,你先回国休假吧。于是,XX 过上了没有薪资还要干活的苦日子。好不容易到了毕业那一天,导师说 XX 你要么就去巴西博士后,要么就不要留在学术界了。此时 XX 已经看透了学术界的本质,最终 XX 离开了学术界,极其不爽地去找了一份和科研毫不相关的工作。

过了一年,导师的另一位学生拿着这个课题弄到了青年基金。又过了四年,又是另外一位学生把 XX 博士论文其中的某些章节拆开重新发表,写了一篇极其 trivial 的论文,在此期间 arxiv 同样没有任何预印稿。

慢慢地 XX 接受了这样的人物设定,慢慢地 XX 确实淡化了对数学科研的期待,但慢慢地 XX 也看淡了所谓的科研过程。

石头丢进水里连水花都不溅,只有淡淡的水波, XX 就连石头都懒得丢了。

“就这样吧”,在以后的日子里,XX 对科研说,爱过!”

随笔(十)— 某高校的游戏零容忍政策

知乎热榜

近日,在知乎热榜上出现了一个问题,某高校要求大学生成年人在校期间不准玩游戏,否则取消班级荣誉和福利。

在 2005 年左右,当年的手机还是 Nokia 的时代,移动端的娱乐方式并没有现在那么丰富。大家的娱乐方式通常来说就是聚在一起打扑克,或者在一起玩电脑游戏。当时比较风靡的单机游戏是暴雪公司开放的魔兽争霸,网络游戏也是该公司开发的魔兽世界。而大一的时候,绝大多数人还没有拥有自己的个人电脑,于是为了玩这些游戏通常都只能够去浦口大学门口的多瑙河网吧,因此一些人就出现了白天上课,晚上包夜的情况。也许是刚20岁出头的年纪身体比较好,到了30岁左右的时候,想通宵熬夜就是一件很困难的事情了。有趣的是,当时一个宿舍会有四个人,一旦有一个人开始打游戏,通常都会带动整个宿舍的人一起玩。

南大浦口的多脑河网络

而学生的想象力总是无穷的,总能够挖掘身边无数的资源,变腐朽为神奇。除了浦口大学门口的多瑙河之外,其实学校内部也有机房。当年大一的时候,数学系总会开设 C++ 编程设计这门课,既然是编程课,那么就需要上机实验,因此玉辉楼的数学系机房就是一个还不错的环境。不过既然是机房,那么它的硬件设施就肯定没有外面的网吧好。但是,机房总是免费的,于是就有一些同学会选择在机房玩一些小游戏,当年的几十台机器还是能够择优选择出几台机器可以运行 Diablo II 的。

南大浦口的玉辉楼

在 PC 游戏的时代,如果辅导员或者科任老师如果想抓学生玩游戏,只需要去网吧和宿舍转一圈,如果晚上没有去自习,基本上在宿舍打游戏的概率会很高。但是,目前是手机游戏的时代,除非这位老师有本事把成年人的手机全部没收,否则成年人只需要换个手机,换个电话号码,开个小号就可以解决问题了。手机的携带比电脑的携带方便太多了,只需要找个远离学校的地方就可以随便打游戏了,而且还不留下任何证据。

当时笔者还在本科的时候,身边也有那么几类人:

  1. 从来不玩游戏的:这条措施对他们来说完全不在乎;
  2. 合理安排游戏时间,能够做到游戏和学习均衡的:这条措施对他们来说有着致命打击。本来这批学生看待游戏的态度就是娱乐放松,玩游戏并不会影响每次考试 90 分,更加不会影响这批学生拿奖学金和顺利毕业。
  3. 绝大部分时间用来游戏的:其实这部分学生才是需要辅导员和科任老师需要关注的对象。如果只是本科的话,辅导员和老师应该好言相劝,同时想点办法让他们花点时间学习,也想尽办法让其本科毕业。只要能够让这批学生按时毕业并且拿到学位证,其实玩不玩游戏也没那么重要了。毕竟这批学生的绝大部分时间都用来玩游戏,最终的学习成绩可能也一般,不是奖学金的有力争夺者。但是,保证他们中的绝大部分能够正常毕业是一件非常重要的事情。

在大学本科期间,笔者也玩单机 PC 游戏,其中包括实况足球,魔兽争霸,暗黑破坏神 2;到了博士期间笔者也跟身边的博士生一起在玩暗黑破坏神 3,炉石传说,极品飞车等游戏。但是,玩这些游戏的同时并不影响笔者能够从学校正常毕业,不影响拿奖学金,更加不影响笔者未来在职场上的工作。直到今日,每周五晚上笔者都会跟身边的同事玩一玩王者荣耀放松心情。如果没有游戏的话,很难想象如何从枯燥乏味的学习,科研,工作中解脱出来。如果完全取消游戏的话,可能只能够去游泳健身了。读博的时候,笔者有一位师兄,属于少数的能够通过游戏赚钱的玩家,但是玩游戏这些事情并不影响其能够博士毕业,更加不影响他在未来的工作中取得很好的业绩。

暗黑破坏神 3

在当今社会的学习和工作中,绝大部分人都会觉得枯燥乏味,毕竟学习是一件苦差事,工作有的时候也会是一种煎熬。在这些辛苦的过程中,游戏可以给人带来一些安慰,让一个成年人的身心感到没有那么艰难。毕竟对于成年人来说,生活本就已经如此艰难了,为什么不能够通过游戏寻找一些乐趣呢。

部分家长的言论

现在有不少的家长也会说,不要让孩子打游戏,在大学期间要好好学习。这些当然没错,但是家长们自身也要做好榜样,一边喊着让孩子好好学习,一边却在打游戏和刷短视频,对孩子而言实在是没有任何说服力。最好的是家长也要做好榜样,除了日常的工作之外,在业余时间也要花时间充电,学习除了本专业之外的其他专业知识,做一做高数的题目,例如研究一下机器学习和金融数学等知识。言传身教,对孩子的教育可能会更好。

Terence Tao 的博客

回想起来,当年打游戏的那些同学毕竟学习成绩一般,毕业之后早早投身工作岗位,赚钱买房养家。学习好的那一批人出国留学,结果回来之后房价大涨,错过了发展的红利。所以,有的时候在某些专业上一直拿奖学金,出国搞科研也不见得是一件特别好的事情。对于一些学习好的同学而言,并不适合搞科研,只是纯粹的学习好而已。

之前读博的时候,听一位老师说过一个想法,可能是他真实想法的体现。在 2000 年左右出国的那一批人有的时候心里特别不平衡。因为 2000 年能够出国攻读生物/化学博士的,都是当年的佼佼者,必须要有足够的学习能力,英语能力,科研能力才能够出国。学习成绩一般的同学就在国内发展,买房娶妻生子。结果 20 年后回头一看,留在国内发展的同学随着发展的红利,资产不知道增值了多少倍;留在美国发展的同学,其实资产和收入的涨幅却没有那么大,而在美国一直做科研的瓶颈也会十分明显。到了 2010 年之后,出国的那批学生有一部分在出国之前就知道自己肯定会回国了,到了 2020 年,可能大部分留学生最终都会回到祖国。每一代人对于出国这件事情真的有着完全不同的理解。

深圳房价变迁图

对于很多学生而言,只需要能顺利毕业和找份工作就可以了,至于有没有奖学金和班级荣誉对他们来说无关紧要的,因为这些本来就是为少部分人准备的。大部分人在基础科学的道路上都是陪跑者,只是陪跑到什么时候而已,有可能本科就结束了,有可能直到博士后才会结束。

最后给个结论,对于本科生,硕士生,博士生而言,用全部的时间打游戏肯定是不行的,无论如何都要想正规办法毕业,拿到毕业证和学位证,毕竟从整个社会的大盘来看,华东五校的毕业生还是属于名校生的。

随笔(九)— 师门轶事

导师篇:

  1. 有一次在办公室跟导师聊天,导师问:“初来新加坡,你的住宿条件好不好,有没有空调?”听到这话我心想导师那么关心学生生活,深受感动,连忙说:“住宿条件一般,暂时没有空调”。导师说:“这样不行啊,没有空调不方便熬夜工作”。我继续说:“白天工作就好了呀”。导师说:“我见过的数学家都是要熬夜工作的,无一例外,白天杂事繁多,夜晚夜深人静适合思考数学”。
  2. 导师说:“每个 PHD 刚来学校的时候,其实我前三年都没怎么管,是因为想看一下学生独立发展能够发展成什么样,了解一下学生的数学能力极限在哪里。”于是,师兄们的毕业年限纷纷变成了 6 年,7 年, 8 年。前三年导师也没有跟我交流过太多论文技术,博士第四年才给我些许帮助,可能也是想看看本人的极限在哪里。后来我独立证明了一个 Real Bound Theorem 也就知道自身的极限大概是哪里了。
  3. 有一次我讲讨论班,自我感觉准备充分,但是讲的时候总是被打断和提问。导师回头就说:“讲讨论班的时候,不要让台上的人觉得很舒服,一定要让他觉得很难受”。还有一次我讲论文,刚说了两句话。导师说:“作为一个搞过多年数学的人,一听你这几句话,就知道你没有懂”。有一次我说我貌似得到一个新的结果,刚讲解了几句,导师就发现了问题,立刻说:“目前你都是一个 PHD 了,怎么还能写出这样一个数学公式”?
  4. 在某次聚餐上,导师说:“目前二师兄已经写好论文了,大师兄应该很快就把论文写好了,三师兄再努力一下搞一年”。然后回头看了看我,说:“你还有很多年”。事后来看,本人博士第四年努力了一下,总共花了一年时间就把论文交上去了。
  5. 同样是一次聚餐,导师问我们师门几人:“你们几个最近每天花在科研上的时间有多少,是一个小时还是两个小时?”大家顿时沉默不言。当时我阅读了一本关于拖延症的书籍,确实也按照书中所说治疗本人的拖延症,每天至少也有三个小时投入写论文中。我就如实告知导师。导师立刻说:“三个小时是肯定不够的,但是这个应该不算太差”。
  6. 在交了毕业论文之后,原本是按照导师计划留在本校做一段时间的研究员,但是导师当天突然告诉我没有给我申请相关职位,于是我就瞬间没有资金来源了,只好安心回家度假。当时想想也算好事,回家过年也算是一大喜事,毕竟留学五年也没有机会回国过年。有一天,系里面突然联系我,让我提供论文中的一些细节和证明。但是我的心里真的是无数 XXX 呼啸而过。看在还没有毕业的份上,即使没有任何收入也只能静下心来补充数学证明。
  7. 在本人的毕业聚餐上,我表达了以后不继续做动力系统的想法,导师和答辩老师都说:“学了数学的人搞不了其他的,只能继续从事数学研究”。当时我就不以为然,觉得自己肯定能够做其他事情,但是修改论文一直在耗费我的时间,也没有努力学习转行技能,当时确实又不知道可以做什么。在最后一次见面的时候,导师跟我说:“如果想回数学界的话,两年内基本上还是可以回来的”。并且导师也跟我的同学表达 XX 未来肯定会回到数学界。但是,我后来找到了一份工作,日常搞搞机器学习和金融数学,最后就不考虑回数学界的事情了。

师兄篇:

  1. 有次一个日本教授来新加坡访问,我们问:“跟他是不是只能说日语了?”二师兄立刻回答:“不要紧,你的三师兄一直都会几句日语”。 但是我回想很久,一直都没有听过三师兄说过日语。
  2. 在大师兄的毕业答辩上,有一个国内的教授问我:“你打算什么时候毕业,是不是明年?”我当时恰好把论文写得差不多了,立刻回答:“我打算今年就交论文毕业”。回想起师兄们的 6 年,7 年,8 年,当时觉得自己真的是毕业神速。
  3. 大家有段时间都在办公室里面玩暗黑 3,基本上是有时间就会开始打游戏。有一次三师兄突然告诉我,玩游戏卖装备已经回本了。于是,三师兄在我心目中一直就是游戏大神的形象。
  4. 在二师兄毕业了之后,在新加坡的就只剩下大师兄,三师兄还有我。有一段时间我们三人为了努力毕业,每周六早上都会去办公室搞讨论班,虽然我也听不懂师兄们在聊啥,但是也只能假装很有兴趣,因为毕业是头等大事。
  5. 在帮大师兄拿毕业证的时候,心想大师兄经过八年的辛苦工作终于毕业了。于是想到自己还没有一个合适的结果,拿学位证遥遥无期,顿时觉得心情十分低落。

(持续补充)

zr9558's Blog