婚恋配对实验
PS:如果各位有疑问的话,可以留下微信,我看到会第一时间加的,以后可以多多交流
1、项目要求
婚恋配对模拟规则:
① 按照一定规则生成了1万男性+1万女性样本:
** 在配对实验中,这2万个样本具有各自不同的个人属性(财富、内涵、外貌),每项属性都有一个得分
** 财富值符合指数分布,内涵和颜值符合正态分布
** 三项的平均值都为60分,标准差都为15分
② 模拟实验。基于现实世界的提炼及适度简化,我们概括了三个最主流的择偶策略:
** 择偶策略1:门当户对,要求双方三项指标加和的总分接近,差值不超过20分;
** 择偶策略2:男才女貌,男性要求女性的外貌分比自己高出至少10分,女性要求男性的财富分比自己高出至少10分;
** 择偶策略3:志趣相投、适度引领,要求对方的内涵得分在比自己低10分~高10分的区间内,且外貌和财富两项与自己的得分差值都在5分以内
③ 每一轮实验中,我们将三种策略随机平分给所有样本(即采用每种策略的男性有3333个样本)
④ 我们为每位单身男女随机选择一个对象,若双方互相符合要求就算配对成功,配对失败的男女则进入下一轮配对。
1、样本数据处理
** 按照一定规则生成了1万男性+1万女性样本:
** 在配对实验中,这2万个样本具有各自不同的个人属性(财富、内涵、外貌),每项属性都有一个得分
** 财富值符合指数分布,内涵和颜值符合正态分布
** 三项的平均值都为60分,标准差都为15分
2、生成99个男性、99个女性样本数据,分别针对三种策略构建算法函数
** 择偶策略1:门当户对,要求双方三项指标加和的总分接近,差值不超过20分;
** 择偶策略2:男才女貌,男性要求女性的外貌分比自己高出至少10分,女性要求男性的财富分比自己高出至少10分;
** 择偶策略3:志趣相投、适度引领,要求对方的内涵得分在比自己低10分~高10分的区间内,且外貌和财富两项与自己的得分差值都在5分以内
** 每一轮实验中,我们将三种策略随机平分给所有样本,这里则是三种策略分别33人
** 这里不同策略匹配结果可能重合,所以为了简化模型
→ 先进行策略1模拟,
→ 模拟完成后去掉该轮成功匹配的女性数据,再进行策略2模拟,
→ 模拟完成后去掉该轮成功匹配的女性数据,再进行策略3模拟
3、以99男+99女的样本数据,绘制匹配折线图
4、生成“不同类型男女配对成功率”矩阵图
2、结果实现
1.1、导入模块创建原始数据
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import warnings
warnings.filterwarnings('ignore')
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
plt.style.use('classic')
import time
#问题1:创建原始数据
def data1(i,gender):
data = pd.DataFrame({'fortune':np.random.exponential(size = i,scale = 15)+45,
'apperance':np.random.normal(loc = 60,size = i,scale = 15),
'character':np.random.normal(loc = 60,size = i,scale = 15)})
data.index = [str(i)+ gender for i in range(1,i+1)]
data.index.name = 'id'
data['score']= data.sum(axis = 1)/3
return data
round_m = data1(10000,'m')
round_f = data1(10000,'f')
1.2、绘制堆叠图查看数据
round_m[['fortune','apperance','character']][:30].plot(kind = 'bar',stacked = True,
figsize = (15,6),colormap ='Reds_r',grid = True)
round_m[['fortune','apperance','character']][:30].plot(kind = 'bar',stacked = True,
figsize = (15,6),colormap ='Blues_r',grid = True)
2.1、获取99个样本数据,模拟第二轮结
round1_m = data1(99,'m')
round1_f = data1(99,'f')
test1_m = round1_m.copy()
test1_f &#