30岁学计算机算法:理工男的脱单概率

编者按:本文作者是滑铁卢大学计算机科学专业17级的学生Bai Li,他在博客上写了一篇用逻辑回归预测找到女朋友的概率教程。论智君友情提示,本文意在分享项目思路,请勿轻易对号入座。

滑铁卢大学是加拿大著名的理工科高校,是北美地区最优秀的大学之一,我们的数学、计算机科学和工程学科水平居世界前列。然而,这样的学校都有一个明显的特点:男多女少。更糟糕的是滑铁卢大学是出了名的缺少社交活动,所以估计我也跟学校里众多cs同学一样:女朋友是找不到的,这辈子都找不到的。

30岁学计算机算法:理工男的脱单概率(1)

有人觉得爱情是无法量化的,这种操作太抽象,女朋友什么的,还是顺其自然吧。但是作为滑铁卢大学的数据科学家,这一点我不敢苟同。计算机专业的男人绝不轻易认输!没有社交,用机器学习帮助完成找女票的事业还不行吗?

下面我就来说说详细的教程,都搬好板凳拿起小本本!

首先,我们要明确这个项目的问题是:滑铁卢大学的男生想找到女朋友,都需要哪些特质?首先,大部分人都觉得工资高肯定更吸引妹子,另外身高或者身材更是加分项。我们想确定的是,哪些因素可以用预测进行量化,哪些仅仅是猜测而没有数据支持。

我大概想了这么几个特征:

  • 约会(目标变量):有女朋友的男生,或者过去五年至少谈了六个月恋爱的男生
  • 是否是国际学生
  • 专业是否为CS、SE或ECE
  • 成绩优异,并找到了牛X的实习
  • 是否幽默健谈
  • 性格是否外向、愿意结交新朋友
  • 是否自信
  • 比我高(175 )
  • 戴不戴眼镜
  • 经常去健身房或喜欢各项运动的人
  • 注重穿衣打扮
  • 长居加拿大或者在加拿大居住工作至少五年
  • 是否为亚裔

你也许注意到其中一些特征太主观了,比如怎么才能规定一个人“有趣”、“幽默”呢?在这个项目中,我将人们分成两部分,用1标记其中一半,另外一半标为0。所以我根据自己对周围人的观察,确定他们找到女朋友的能力。

要说明的是,本文并不属于客观严谨的统计型研究,而是给大家提供一种思路。

为了收集数据,我把每个能想到的同学的信息都制成表格,用1或0代表“是”或“否”,最后共有70个同学信息。注意了,滑铁卢大学的各位,过去两年跟Bai Li说过话的男生,你们可能已经被用作训练数据了哦。

分析过程

首先我们在目标变量Dating上对各种其他变量进行费舍尔精确检验,最终得到三种最重要的变量:

  • 健身——爱健身爱运动的男生比其他男生有女朋友的概率大了两倍(p-value=0.02)
  • 眼镜——不戴眼镜的男生比戴眼镜的男生有女朋友的概率多了70%(p-value=0.08)(睡前别玩手机了!眼保健操做起来啊各位!)
  • 自信——有信心的男森最帅啦(p-value=0.09)

果然妹子们都喜欢身材好、有朝气的男生。不过我有点吃惊戴眼镜竟然这么重要?可能有些人会把戴眼镜和“书呆子”联系起来吧,不过还真的有论文研究过这个问题,结果发现人们确实觉得眼镜会让魅力大打折扣。

有些变量也许可以预测成功约会的概率,但是由于样本数量太少,结果不确定性很大:

  • 国际学生比当地学生成功几率大
  • 亚洲男生比其他种族的男生优势较小
  • 其他因素不变的情况下,CS专业的男生似乎更受欢迎

剩下的类似身高、成绩、穿衣打扮等因素跟能否找女朋友关系不大,就算你去Facebook总部工作,对不起,该单身还是单身。

下面是实验的全部结果:

Variable: international N(international)=10, N(~international)=60 p(dating|international)=0.60, p(dating|~international)=0.38 p-value=0.299 Variable: cs N(cs)=56, N(~cs)=14 p(dating|cs)=0.45, p(dating|~cs)=0.29 p-value=0.368 Variable: career N(career)=46, N(~career)=24 p(dating|career)=0.43, p(dating|~career)=0.38 p-value=0.799 Variable: interesting N(interesting)=34, N(~interesting)=36 p(dating|interesting)=0.47, p(dating|~interesting)=0.36 p-value=0.467 Variable: social N(social)=29, N(~social)=41 p(dating|social)=0.45, p(dating|~social)=0.39 p-value=0.806 Variable: confident N(confident)=37, N(~confident)=33 p(dating|confident)=0.51, p(dating|~confident)=0.30 p-value=0.092 Variable: tall N(tall)=26, N(~tall)=44 p(dating|tall)=0.46, p(dating|~tall)=0.39 p-value=0.619 Variable: glasses N(glasses)=41, N(~glasses)=29 p(dating|glasses)=0.32, p(dating|~glasses)=0.55 p-value=0.084 Variable: gym N(gym)=22, N(~gym)=48 p(dating|gym)=0.64, p(dating|~gym)=0.31 p-value=0.018 Variable: fashion N(fashion)=17, N(~fashion)=53 p(dating|fashion)=0.41, p(dating|~fashion)=0.42 p-value=1.000 Variable: canada N(canada)=31, N(~canada)=39 p(dating|canada)=0.42, p(dating|~canada)=0.41 p-value=1.000 Variable: asian N(asian)=59, N(~asian)=11 p(dating|asian)=0.37, p(dating|~asian)=0.64 p-value=0.181

接着,我们对比了各变量之间的关系,这可以帮助找出错误的模型假设。红点表示正面联系,蓝色表示负面联系。我们只显示出了统计显著性<0.1的关系,所以大部分变量的组合是空白的。

30岁学计算机算法:理工男的脱单概率(2)

如图所示{有女朋友,有自信,健身,不戴眼镜}互相有关。

这里我再强调一下,我统计的信息都是身边的同学,或者同学的同学,专业都是学CS的并不能代表整个滑铁卢大学的学生。

所以任何模型在这个数据上训练都会反映出同样的偏差。未来我会收集更多数据改进模型。

用逻辑回归预测恋爱概率

如何用算法预测找到女朋友的概率呢?让我们搓搓手准备开始吧!

我训练了一个逻辑回归GLM,从各个解释变量的角度预测找到女朋友的概率。利用R中的glmnet和caret包,我用弹性网络正则化训练了一个GLM。然后再用标准网格搜索进行超参数优化,用leave-one-out交叉验证并且在每次迭代中对Kappa系数进行优化。

30岁学计算机算法:理工男的脱单概率(3)

结果模型的ROC曲线上交叉验证的AUC分数为0.673,也就是说,模型的预测还是有点准的,不过其中的不确定性因素仍然很多。最后,我还做了一个简单计算器,大家有兴趣可以玩玩。地址请私信小编。

30岁学计算机算法:理工男的脱单概率(4)

小编测试了一下,全部选取了“弱势因素”,这个结果可真悲伤。

好了啥也不说了,我要去健身房举铁冷静一下,再预约个近视手术了(手动再见)。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页