点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

你,要不要摆脱技术人单身率高的魔咒?

这里有一份相亲战斗力评估指数,阿里云帮你测一测以后还能不能找到对象。

据说是借助哥伦比亚大学多年研究相亲找对象的心血,通过几个简单的特征来做评估。

具体模(yuan)型(fen)的测试页面扫下方二维码即可试玩~

在正式开始实验之前,我们需要寻找一个简单好用方便上手的工具,这里我推荐一波阿里云的PAI-DSW探索者版,它对于个人开发者是免费的,还有免费GPU资源可以使用,实验的数据更会免费保存30天。

点击这里(链接:https://dsw-dev.data.aliyun.com/#/)只要登陆就可直接使用。今天,我们就会通过这个工具来探索人性的奥秘,走进两性关系的神秘空间,嘿嘿嘿。

整个实验的数据收集于一个线下快速相亲的实验。(链接:https://faculty.chicagobooth.edu/emir.kamenica/documents/genderDifferences.pdf)这个实验中,参与者被要求参加多轮与异性进行的快速相亲,每轮相亲持续4分钟,在4分钟结束后,参与者双方会被询问是否愿意与他们的对象再见面。只有当双方都回答了“是”的时候,这次相亲才算是配对成功。

同时,参与者也会被要求通过以量化的方式从外观吸引力,真诚度,智商,风趣程度,事业心,兴趣爱好这六个方向来评估他们的相亲对象。

这个数据集也包含了很多参加快速相亲的参与者的其他相关信息,比如地理位置,喜好,对于理想对象的偏好,收入水平,职业以及教育背景等等。关于整个数据集的具体特征描述可以参考这个文件。(链接:https://pai-public-data.oss-cn-beijing.aliyuncs.com/speed_dating/Speed%20Dating%20Data%20Key.doc)

本次我们实验的目的主要是为了找出,当一个人在参加快速相亲时,到底会有多高的几率能够遇到自己心动的人并成功牵手。

在我们建模分析探索人性的秘密之前,让我们先读入数据,来看看我们的数据集长什么样。

import pandas as pddf = pd.read_csv('Speed Dating Data.csv', encoding='gbk')print(df.shape)

通过观察,我们不难发现,在这短短的两年中,这个实验的小酒馆经历了8000多场快速相亲的实验。由此我们可以非常轻易的推断出,小酒馆的老板应该赚的盆满钵满(大雾)

然后从数据的宽度来看,我们会发现一共有接近200个特征。

关于每个特征的具体描述大家可以参考这篇文档链接:https://pai-public-data.oss-cn-beijing.aliyuncs.com/speed_dating/Speed%20Dating%20Data%20Key.doc。

然后我们再观察数据的完整度,看看是否有缺失数据。

percent_missing = df.isnull().sum() * 100 / len(df)missing_value_df = pd.DataFrame({'column_name': df.columns,'percent_missing': percent_missing})missing_value_df.sort_values(by='percent_missing')

通过以上代码,我们不难发现,其实还有很多的特征是缺失的。这一点在我们后面做分析和建模的时候,都需要关注到。因为一旦一个特征缺失的数据较多,就会导致分析误差变大或者模型过拟合/精度下降。看完数据的完整程度,我们就可以继续往下探索了。

然后第一个问题就来了,在这8000多场的快速相亲中,到底有多少场相亲成功为参加的双方找到了合适的伴侣的?带着这个问题,我们就可以开始我们的第一个探索性数据分析。

# 多少人通过Speed Dating找到了对象plt.subplots(figsize=(3,3), dpi=110,)# 构造数据size_of_groups=df.match.value_counts().valuessingle_percentage = round(size_of_groups[0]/sum(size_of_groups) * 100,2)matched_percentage = round(size_of_groups[1]/sum(size_of_groups)* 100,2)names = ['Single:' + str(single_percentage) + '%','Matched' + str(matched_percentage) + '%']# 创建饼图plt.pie(size_of_groups,labels=names,labeldistance=1.2,colors=Pastel1_3.hex_colors)plt.show()

从上边的饼图我们可以发现,真正通过快速相亲找到对象的比率仅有16.47%。

然后我们就迎来了我们的第二个问题,这个比率和参加的人的性别是否有关呢?这里我们也通过Pandas自带的filter的方式

df[df.gender == 0]

来筛选数据集中的性别。通过阅读数据集的文档,我们知道0代表的是女生,1代表的是男生。然后同理,我们执行类似的代码

# 多少女生通过Speed Dating找到了对象plt.subplots(figsize=(3,3), dpi=110,)# 构造数据size_of_groups=df[df.gender == 0].match.value_counts().values # 男生只需要吧0替换成1即可single_percentage = round(size_of_groups[0]/sum(size_of_groups) * 100,2)matched_percentage = round(size_of_groups[1]/sum(size_of_groups)* 100,2)names = ['Single:' + str(single_percentage) + '%','Matched' + str(matched_percentage) + '%']# 创建饼图plt.pie(size_of_groups,labels=names,labeldistance=1.2,colors=Pastel1_3.hex_colors)plt.show()

来找出女生和男生分别在快速相亲中找到对象的几率的。

女生的几率:

男生的几率:

不难发现,在快速相亲中,女生相比于男生还是稍微占据一些优势的。女生成功匹配的几率比男生成功匹配的几率超出了0.04。

然后第二个问题来了:是什么样的人在参加快速相亲这样的活动呢?真的都是大龄青年(年龄大于30)嘛?这个时候我们就可以通过对参加人群的年龄分布来做一个统计分析。

# 年龄分布age = df[np.isfinite(df['age'])]['age']plt.hist(age,bins=35)plt.xlabel('Age')plt.ylabel('Frequency')

不难发现,参加快速相亲的人群主要是22~28岁的群体。这点与我们的预期有些不太符合,因为主流人群并不是大龄青年。接下来的问题就是,年龄是否会影响相亲的成功率呢?和性别相比,哪个对于成功率的影响更大?这两个问题在本文就先埋下一个伏笔,不一一探索了,希望阅读文章的你能够自己探索。

但是这里可以给出一个非常好用的探索相关性的方式叫做数据相关性分析。通过阅读数据集的描述,我已经为大家选择好了一些合适的特征去进行相关性分析。这里合适的定义是指:1. 数据为数字类型,而不是字符串等无法量化的值。2.数据的缺失比率较低

date_df = df[['iid', 'gender', 'pid', 'match', 'int_corr', 'samerace', 'age_o','race_o', 'pf_o_att', 'pf_o_sin', 'pf_o_int', 'pf_o_fun', 'pf_o_amb','pf_o_sha', 'dec_o', 'attr_o', 'sinc_o', 'intel_o', 'fun_o', 'like_o','prob_o', 'met_o', 'age', 'race', 'imprace', 'imprelig', 'goal', 'date','go_out', 'career_c', 'sports', 'tvsports', 'exercise', 'dining','museums', 'art', 'hiking', 'gaming', 'clubbing', 'reading', 'tv','theater', 'movies', 'concerts', 'music', 'shopping', 'yoga', 'attr1_1','sinc1_1', 'intel1_1', 'fun1_1', 'amb1_1', 'attr3_1', 'sinc3_1','fun3_1', 'intel3_1', 'dec', 'attr', 'sinc', 'intel', 'fun', 'like','prob', 'met']]# heatmapplt.subplots(figsize=(20,15))ax = plt.axes()ax.set_title("Correlation Heatmap")corr = date_df.corr()sns.heatmap(corr,xticklabels=corr.columns.values,yticklabels=corr.columns.values)

通过上面这张图这张相关性分析的热力图,我们可以先关注一些特别亮的和特别暗的点。比如我们可以发现,在 pf_o_att这个表示相亲对象给出的外观吸引力这个特征上,和其他相亲对象给出的评分基本都是严重负相关的,除了pf_o_fun这一特征。由此我们可以推断出两个点:

  1. 大家会认为外观更加吸引人的人在智商,事业心,真诚度上表现会相对较差。换句话说,可能就是颜值越高越浪

  2. 幽默风趣的人更容易让人觉得外观上有吸引力,比如下面这位幽默风趣的男士(大雾):

然后我们再看看我们最关注的特征 match,和这一个特征相关性比较高的特征是哪几个呢?不难发现,其实就是'attr_o','sinc_o','intel_o','fun_o','amb_o','shar_o'这几个特征,分别是相亲对方给出的关于外观,真诚度,智商,风趣程度,事业线以及兴趣爱好的打分。接下来我们就可以根据这个来进行建模了。首先我们将我们的特征和结果列都放到一个Dataframe中,然后再去除含有空值的纪录。最后我们再分为X和Y用来做训练。当然分为X,y之后,由于我们在最开始就发现只有16.47%的参与场次中成功匹配了,所以我们的数据有严重的不均衡,这里我们可以用SVMSMOTE(链接:https://imbalanced-learn.readthedocs.io/en/stable/generated/imblearn.over_sampling.SVMSMOTE.html)来增加一下我们的数据量避免模型出现过度拟合。

# preparing the dataclean_df = df[['attr_o','sinc_o','intel_o','fun_o','amb_o','shar_o','match']]clean_df.dropna(inplace=True)X=clean_df[['attr_o','sinc_o','intel_o','fun_o','amb_o','shar_o',]]y=clean_df['match']oversample = imblearn.over_sampling.SVMSMOTE()X, y = oversample.fit_resample(X, y)# 做训练集和测试集分割X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0, stratify=y)

数据准备好之后,我们就可以进行模型的构建和训练了。通过以下代码,我们可以构建一个简单的逻辑回归的模型,并在测试集上来测试。

# logistic regression classification modelmodel = LogisticRegression(C=1, random_state=0)lrc = model.fit(X_train, y_train)predict_train_lrc = lrc.predict(X_train)predict_test_lrc = lrc.predict(X_test)print('Training Accuracy:', metrics.accuracy_score(y_train, predict_train_lrc))print('Validation Accuracy:', metrics.accuracy_score(y_test, predict_test_lrc))

我们可以看到结果为0.83左右,这样我们就完成了一个预测在快速相亲中是否能够成功配对的机器学习模型。

针对这个模型,数据科学老司机我还专门制作了一个小游戏页面),来测试你的相亲战斗力指数。快来体验吧:

https://tianchi.aliyun.com/specials/promotion/dsw-hol?referFrom=mvp

阿里云AI发女朋友啦!相关推荐

  1. 七夕节,阿里云AI发女朋友了!道翰天琼认知智能机器人平台API接口大脑为您揭秘。

    七夕节,阿里云AI发女朋友了!道翰天琼认知智能机器人平台API接口大脑为您揭秘. 少年,今日七夕.我想你一定还单身. 这里有一份相亲战斗力评估指数,阿里云帮你测一测以后还能不能找到对象.[doge 据 ...

  2. 七夕节,阿里云AI发女朋友了

    允中 发自 凹非寺  量子位 编辑 | 公众号 QbitAI 少年,今日七夕.我想你一定还单身. 这里有一份相亲战斗力评估指数,阿里云帮你测一测以后还能不能找到对象.[doge 据说是借助哥伦比亚大学 ...

  3. 阿里云AI平台NLP使用

    最近在研究NLP的相关知识,尤其是自然语言处理方面的,尝试了百度和腾讯的NLP之后,开始熟悉阿里的,但是全网都没有几篇相关博客(也可能是我搜索问题),幸好阿里的官方文档讲的够清楚,摸索着初步实现了,既 ...

  4. 【阿里云高校计划】阿里云AI训练营_Day04_车辆检测系统

    项目介绍 参加阿里云AI训练营的第4天,完成一个车辆检测系统 主要思路:用户上传身份证和受损车辆图片,识别结果返回前端,同时将数据存入数据库. 项目用到文档地址 阿里云达摩院视觉开放平台:https: ...

  5. 阿里云国际代理商:阿里云AI城市大脑项目在九江启动运行

    阿里云国际代理商:阿里云AI城市大脑项目在九江启动运行 聚搜云是上海聚搜信息技术有限公司旗下品牌,坐落于魔都上海,服务于全球.2019年成为阿里云代理商生态合作伙伴.与阿里云代理商.腾讯云.西部数码. ...

  6. 解决phpmailer在阿里云无法发邮件

    # 解决phpmailer在阿里云无法发邮件 好好的PHP发邮件代码,在局域网是正常的,上传到阿里云平台,就发不出去邮件. 原来,现在阿里云25端口管理的很严格,要申请通过难度太大,所以很有可能25端 ...

  7. 解读阿里云AI产品矩阵:目标是打造最强中国云计算能力

    在近日举办的阿里云栖大会武汉峰会上,阿里云AI产品矩阵的亮相作为压轴大戏出场,这也是阿里云首次曝光了人工智能产品家族,全方位公开AI产品体系,AI作为阿里云,乃至阿里巴巴集团技术应用和市场战略的重要一 ...

  8. 阿里云 AI 编辑部获 CCBN 创新奖,揭秘传媒行业解决方案背后的黑科技

    简介:视频云驱动智媒创新 5 月 27 日,CCBN(第二十八届中国国际广播电视信息网络展览会)在北京隆重召开,在本次的 "CCBN 年度创新奖" 评选中,阿里云视频云凭借 AI ...

  9. 阿里云 AI 编辑部获 CCBN 创新奖,传媒行业解决方案背后的黑科技

    简介:视频云驱动智媒创新 5 月 27 日,CCBN(第二十八届中国国际广播电视信息网络展览会)在北京隆重召开,在本次的 "CCBN 年度创新奖" 评选中,阿里云视频云凭借 AI ...

最新文章

  1. 跨平台PHP调试器设计及使用方法——高阶封装
  2. Python中的pickle模块
  3. 微软在慕尼黑设立欧洲首个物联网实验室
  4. 程序运行背后的那些事 ~ 【程序的编译(预处理操作)+链接】
  5. mysql socket错误_解决Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’错误...
  6. 为Chrome多账户添加单独的快捷方式
  7. 单播,组播,广播的区别
  8. The underlying provider failed on open 问题解决
  9. qt中new与delete使用示例
  10. Qt总结:QMessageBox(原生态弹出框及究极超nice封装自定义弹出框)
  11. python hello world
  12. Caused by: java.lang.SecurityException: Neither user 10068 nor current process has android.permissio
  13. Android apps 拍立知-功能实现(百度tts语音合成使用)
  14. 双绞线 计算机考试,计算机基础知识:有线传输介质之双绞线
  15. Nature综述:一文揭秘土壤微生物的生死过程如何影响生物地球化学
  16. input checkbox 获取选中值和设置选中状态
  17. 送你一个励志故事(转载)
  18. 在VC中编程实现按钮的启用(enable)和禁用(disable)
  19. json大文件导入数据库
  20. oracle进程一直正在启动不了,如果 SELinux 正在运行,则 fmd 守护进程可能不启动...

热门文章

  1. python3 all any 判断迭代参数 是否全部 是否有 为true
  2. golang 结构体struct 标签tag 标记 `` 简介
  3. python3 str() repr() 区别
  4. linux sed命令 删除指定行
  5. linux编译c++11的代码
  6. Android开发--图形图像与动画(三)--Animation效果的XML实现
  7. socket通信函数的深入分析
  8. Linux系统调用的实现机制分析
  9. Linux0.11进程切换和TSS结构
  10. 《Debug Hacks》和调试技巧