30岁学计算机算法:理工男的脱单概率
编者按:本文作者是滑铁卢大学计算机科学专业17级的学生Bai Li,他在博客上写了一篇用逻辑回归预测找到女朋友的概率教程。论智君友情提示,本文意在分享项目思路,请勿轻易对号入座。
滑铁卢大学是加拿大著名的理工科高校,是北美地区最优秀的大学之一,我们的数学、计算机科学和工程学科水平居世界前列。然而,这样的学校都有一个明显的特点:男多女少。更糟糕的是滑铁卢大学是出了名的缺少社交活动,所以估计我也跟学校里众多cs同学一样:女朋友是找不到的,这辈子都找不到的。
有人觉得爱情是无法量化的,这种操作太抽象,女朋友什么的,还是顺其自然吧。但是作为滑铁卢大学的数据科学家,这一点我不敢苟同。计算机专业的男人绝不轻易认输!没有社交,用机器学习帮助完成找女票的事业还不行吗?
下面我就来说说详细的教程,都搬好板凳拿起小本本!
首先,我们要明确这个项目的问题是:滑铁卢大学的男生想找到女朋友,都需要哪些特质?首先,大部分人都觉得工资高肯定更吸引妹子,另外身高或者身材更是加分项。我们想确定的是,哪些因素可以用预测进行量化,哪些仅仅是猜测而没有数据支持。
我大概想了这么几个特征:
- 约会(目标变量):有女朋友的男生,或者过去五年至少谈了六个月恋爱的男生
- 是否是国际学生
- 专业是否为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的关系,所以大部分变量的组合是空白的。
如图所示{有女朋友,有自信,健身,不戴眼镜}互相有关。
这里我再强调一下,我统计的信息都是身边的同学,或者同学的同学,专业都是学CS的并不能代表整个滑铁卢大学的学生。
所以任何模型在这个数据上训练都会反映出同样的偏差。未来我会收集更多数据改进模型。
用逻辑回归预测恋爱概率如何用算法预测找到女朋友的概率呢?让我们搓搓手准备开始吧!
我训练了一个逻辑回归GLM,从各个解释变量的角度预测找到女朋友的概率。利用R中的glmnet和caret包,我用弹性网络正则化训练了一个GLM。然后再用标准网格搜索进行超参数优化,用leave-one-out交叉验证并且在每次迭代中对Kappa系数进行优化。
结果模型的ROC曲线上交叉验证的AUC分数为0.673,也就是说,模型的预测还是有点准的,不过其中的不确定性因素仍然很多。最后,我还做了一个简单计算器,大家有兴趣可以玩玩。地址请私信小编。
小编测试了一下,全部选取了“弱势因素”,这个结果可真悲伤。
好了啥也不说了,我要去健身房举铁冷静一下,再预约个近视手术了(手动再见)。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com