居民幸福感挖掘
发布时间:2019-06-28 浏览次数:175
作者:武锦、陈桦、何健
1.
对于幸福感的定义,往往因人而异。有人认为身体健康就是幸福,有人认为生活富裕就是幸福,还有人认为社会公平了才能幸福。在社会科学领域,幸福感的研究占据了一个很重要的位置,它涉及到很多学科,比如哲学、心理学、社会学等等,这些学科更多地是从一个宏观的角度去解释大众幸福度受到哪些因素的影响。在日常生活中,幸福感与大家息息相关,每个人对幸福感都有自己的衡量标准。因此,如果能发现影响幸福感的共性,生活中将多一些乐趣;如果能找到影响幸福感的政策因素,便能通过优化资源配置来提升国民的幸福感。
目前的社会科学研究,大多注重变量的可解释性和未来政策的落地,主要采用了线性回归和逻辑回归的方法,在收入、健康、职业、社交关系、休闲方式等经济人口因素,以及政府公共服务、宏观经济环境、税负等宏观因素上做了一系列的推测和发现。
此次,我们尝试了幸福感预测这一经典课题。由于影响幸福感的因素有很多,比如收入、健康、职业、社会公平等等,关系较为复杂,用较为简单的线性模型也许不足以刻画这些因素和幸福感的关系。因此,我们希望尝试现有社会科学研究外维度的算法,比如基于树的模型,充分发挥统计学科的优势,挖掘潜在的影响因素,发现更多可解释、可理解的相关关系,挖掘幸福感的潜在影响因素。
2.
我们的课题是取自阿里云天池平台,数据来源于中国人大某中心主持的社会调查项目,涉及全国多个省份,采用问卷调查的方式。基于问卷调查的结果,提取了其中40多个特征,目标变量是居民对幸福感的评价,评价分为两类:幸福度较低(1)和幸福度较高(0)。我们希望通过这些特征来预测其对幸福感的评价。
数据集描述如表1所示:
| 问题类型 | 二分类问题 |
| 问题领域 | 社会科学 |
| 实例数量 | 8000 |
| 响应变量 | 二分类变量 |
| 特征数量 | 40 |
| 缺失值 | nan |
表1社会调查数据集描述
数据集的响应变量是happiness,即居民幸福度,是一个二分类变量,1表示幸福度较低,0表示幸福度较高。数据集的解释变量有40个,分为数值型变量、分类型变量和时间类型变量,主要分为三类:个体变量(性别、年龄、地域、职业、健康、婚姻与政治面貌等等)、家庭变量(父母、配偶、子女、家庭资本等等)和社会态度(公平、信用、公共服务等等)。表2中详细解释了41个变量的各种取值和对应含义。
| 变量名称 | 问卷问题 | 变量类型 | 取值含义 |
| happiness | 幸福感 | 分类型 0-1变量 | 0-幸福度较高;1-幸福度较低 |
| survey_type | 样本类型 | 分类型 | 1-城市;2-农村 |
| province | 采访地点 | 分类型 | 1-31分别代表31个省 |
| city | 采访地点 | 分类型 | 地级市编码 |
| county | 采访地点 | 分类型 | 县/区编码 |
| survey_time | 问卷当前时间 | 时间类型 | - |
| gender | 性别 | 分类型 | 1-男;2-女 |
| birth | 出生年份 | 数值型 | - |
| nationality | 民族 | 分类型 | 1-汉;2-蒙;…共8类 |
| religion | 是否有宗教信仰 | 分类型 | 0-否;1-是 |
| religion_freq | 参加宗教活动的频繁程度 | 分类型 | 1-9,频率由低到高 |
| edu | 教育程度 | 分类型 | 1-14,程度由低到高 |
| income | 年收入 | 数值型 | - |
| political | 政治面貌 | 分类型 | 1-群众; 2-共青团员; 3-民主党派; 4-共产党员; |
| floor_area | 住房面积 | 数值型 | - |
| height_cm | 身高 | 数值型 | 单位:cm |
| weight_jin | 体重 | 数值型 | 单位:斤 |
| health | 健康状况 | 分类型 | 1-5,由坏到好 |
| health_problem | 健康问题影响到工作生活的程度 | 分类型 | 1-5 |
| depression | 最近心情沮丧程度 | 分类型 | 1-5,由严重到轻微 |
| hukou | 户口状况 | 分类型 | 1-8,8种类别 |
| socialize | 社交频率 | 分类型 | 1-5,由少到多 |
| relax | 放松频率 | 分类型 | 1-5,由少到多 |
| learn | 学习频率 | 分类型 | 1-5,由少到多 |
| equity | 认为社会是否公平 | 分类型 | 1-5,由不公平到公平 |
| class | 认为所处等级 | 分类型 | 1-10,由低到高 |
| work_exper | 工作经历 | 分类型 | 1-6,6种工作 |
| work_status | 工作状况 | 分类型 | 1-9,9种工作状况 |
| work_yr | 工作年限 | 数值型 | - |
| work_type | 工作性质 | 分类型 | 1-全职;2-非全职 |
| work_manage | 工作管理情况 | 分类型 | 1-4,4种管理情况 |
| family_income | 家庭总收入 | 数值型 | - |
| family_m | 家庭成员数量 | 数值型 | - |
| family_status | 家庭经济状况 | 分类型 | 1-5,由低到高 |
| house | 房产数量 | 数值型 | - |
| car | 是否有小汽车 | 分类型 | 1-有;2-没有 |
| marital | 婚姻状况 | 分类型 | 1-7,7种婚姻状况 |
| status_peer | 在同龄人中的社会经济地位 | 分类型 | 1-3,由高到低 |
| status_3_before | 与3年前相比社会经济地位变化 | 分类型 | 1-上升;2-差不多;3-下降 |
| view | 所持观点和大众一致情况 | 分类型 | 1-5,由少到多 |
| inc_ability | 收入是否合理 | 分类型 | 1-4,由合理到不合理 |
表2数据集变量概述
二、 模型简介
本次课题用到的模型主要有:Logistic回归、随机森林、XGBoost。最后尝试用Easy Ensemble的方式对这3种模型做进一步集成,以下是这几个模型的简单介绍。
1.
假定观测值,因变量
,i=1,…,N,并假定因变量取值为1和0,构建Logistic模型为:
通过对训练集的拟合,可以得到相对应的和
,得到Logistic回归模型,再对测试集的数据进行预测,判断模型的效果。
2.
随机森林是一种经典的集成学习方法,它的基本思想是用随机的方式建立一个森林,在森林里有很多决策树组成,每一棵决策树之间是没有关联的。在分类问题中,当有一个新样本的时候,我们让森林中的每一棵决策树分别进行预测,判断这个样本属于哪一类,然后用多数投票的方式,哪一类被选择的多,就将那一类作为最终的分类结果。在回归问题中,随机森林输出的是所有决策树输出的平均值。
3.
XGBoost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛。XGBoost算法比较复杂,针对传统GBDT算法做了很多细节改进,包括损失函数、正则化、切分点查找算法优化、稀疏感知算法、并行化算法设计等等。
4.
以上我们分别建立了3种分类模型,最后,我们考虑将几个模型进行集成。由于两类样本占比约为4:1,存在一定的不平衡现象,因此尝试采用Easy Ensemble方法,用以减小样本不平衡带来的影响。
Easy Ensemble的主要思想是将数量较多的那类样本随机切分成k个子集,每次用k个子集中的1个,连同另一类样本一起建模,这样得到k个模型,最后再将k个模型进行集成,得到一个最终的分类模型。Easy Ensemble的大致流程如下:
图1 Easy Ensemble大致流程
三、 实例分析
1.
本数据集共有8000条居民社会调查数据,用这8000条数据进行建模,自变量数为40个,因变量为居民幸福感(1 = 幸福度较低,0 = 幸福度较高)。其中80%作为训练数据,20%作为测试数据。
2.
首先,大致观察一下数据格式,检查缺失值和异常值。
检查数据的缺失值情况,发现其中四列变量的缺失值较多,缺失率达到近70%,分别是如下变量:
work_status:工作状况(合伙人、个体工商户、自由职业等)
work_yr:工作年限
work_type:工作性质(全职、非全职)
work_manage:管理活动情况(是否管理别人、是否受别人管理等)
对于这四列变量,由于缺失值较多,因此将其直接删除。此外,family_income,即家庭收入一列存在少量缺失,考虑用中位数填补。
检查异常值情况,由于很多数据列存在一种异常值情况:-1 = 不适用;-2 = 不知道;-3 = 拒绝回答;-8= 无法回答。检查异常数据数量后,将所有出现过这几类异常值的行删除。
接着,对变量做了初步筛选,删除了一些列,主要有以下三类:
1)
2)
3)
最后,我们将birth转换为年龄,再将数值型变量做等频率分箱。分箱处理如下:
1) 将income和family_income列等频率分为4类;
2) 将height_cm和weight_jin列等频率分为5类。
3.
3.1
由于变量比较多,这边只挑出部分图来来简单看下。图2是被调查者所属的类型(1-城市,2-农村),蓝色和黄色块分别表示幸福度较高和幸福度较低的人群。可以看出两类样本在这个变量上有微小的差异。现在城镇化速度加快,很多农村地区的基础设施都不断地完善,加上国家对三农问题的重视,农村的条件正在不断改善。但和城市相比起来,可能还有些差距,这可能也导致了不幸福人群中,农村类型占比要略过提高。
图3显示了被调查者过去一个月感到心情抑郁或者沮丧的频繁程度,数字越小表示越频繁。可以看到心情是很影响个人对幸福感的掌控的。可以很明显的看出,不幸福的人过去一个月的心情往往是比较低落的。这种大家一看就很明白,心情不好,也就会难以发现生活中其他很多有趣的事,幸福度自然就会低很多。还有一些其他的个人特征,比如健康问题啊,年龄啊等等,都可以通过画这样的图来直观的看下特征的区分度。
图2被调查者所属类型 图3被调查者心情沮丧频繁程度
3.2
下面,同样通过简单的可视化看看家庭因素对个人幸福度的影响。图4显示的是家庭住房面积的影响。我们也对其进行了分箱处理,0-4顺次表示家庭住房面积的升高。可以明显的看出家庭住房面积低的人要更倾向于不幸福。
图5反映的是家庭经济状况在所在地属于哪一档,数字越大表示档次越高,3表示平均水平,我们也可以看出,不幸福的人群在地低于平均水平部分占比很大,而幸福的人群中,一半以上集中在平均水平。这儿得出的结论也显而易见了,只要不低于所在地平均水平,人还是比较容易满足的,这也就是说,只要大家都差不多,是多是少都不是问题。这也印证了中国一句古话,“不患寡而患不均”,自己碗里那么少,再看看别人的蛋糕那么大,自然会有心里落差,哪儿再谈幸福感。因此,缩小贫富差距,把蛋糕分好,其实是提高大众幸福感很重要的一个因素。
图4家庭住房面积 图5家庭经济状况
3.3
最后我们再简单看下,社会态度这一因素对大众幸福感的影响。社会态度这些因素主要描述的是大众对自己社会的融入度的判断。主要反映自己认为自己在社会中的地位、对社会热点问题和大众看是否一致这些方面。从图中就可以看出,这些特征在两类样本中的取值还是有较大差异的。拿图6图简单说下,描述的是个人认为自己处于哪个等级之上,1-10顺次表示等级的提高。可以看出不幸福人群主要集中在社会底层中,这群人属于社会弱势群体,拥有的社会资源也比较少。从这一变量还是看出,社会公平的重要性。
图6社会地位 图7在同龄人中的地位
3.4
从以上的分析中,我们可以从图形上直观的看出哪些变量对幸福感有较大的影响,还有些特征在2类差异中不是很大,光从图形上难以决断,因此,下面我们对这些变量采用列联表卡方检验,看看哪些特征对因变量没有显著影响。
| 个人特征 | 卡方检验P值 |
| 性别 | 0.86 |
| 民族 | 0.81 |
| 是否信仰宗教 | 0.14 |
| 参加宗教活动的频率 | 0.95 |
| 身高 | 0.06 |
表3列联表卡方检验结果
从检验的结果来看,性别、名族、宗教信仰、身高这几个变量没有通过卡方检验,认为这几个变量对幸福感的影响不是很大。所有家庭特征、社会态度特征均通过显著性检验,说明家庭、个人在社会中的定位以及社会认同感对幸福感影响还是很大的。
4.
通过简单的探索性数据分析,大致可以看出哪些特征对幸福感比较重要,哪些特征可能无关紧要。下面我们可以基于上面的分析,根据已有的数据建立分类模型,帮助我们根据一个人的个人、家庭、社会态度特征,判断这个人是否幸福。
为了对比,我们分别用经过特征选择后的部分特征以及使用全部特征进行建模。模型效果如下:
| 模型 | XGBoost | Random Forest | Logistic Regression | Easy Ensemble | ||||
| 部分 特征 | 全部 特征 | 部分 特征 | 全部 特征 | 部分 特征 | 全部 特征 | 部分 特征 | 全部 特征 | |
| F1 | 0.54 | 0.56 | 0.53 | 0.52 | 0.54 | 0.52 | 0.54 | 0.56 |
| Recall | 0.73 | 0.75 | 0.62 | 0.61 | 0.63 | 0.61 | 0.70 | 0.72 |
表4模型效果
从上面的结果可以看出,在单个模型中,XGBoost在F1和Recall指标上的效果最优。使用部分特征和全部特征建模后,F1和Recall的值相差不大,也就是说明特征筛选可以在保证精度不变的情况下,有效降低模型的复杂度。将三个模型进行Easy Ensemble的效果并不显著,XGBoost的结果相仿。
5.
5.1逻辑回归
我们选取了逻辑回归中系数绝对值最大的前5个变量,依次如下:
1)
2)
3)
4)
5)
可以看出,逻辑回归建立的模型确实比较有较好的解释性的,筛选出来的这几个重要特征大多属于社会态度这一类,说明一个人对这个社会的认同感对其幸福感影响还是蛮大的。
5.2随机森林
图8随机森林中的决策树示例1
图9随机森林中的决策树示例2
随机森林通过选取适当的阈值在该数据集上recall达到0.62,模型认为比较重要的特征有所在省份、社会是否公平、所处阶层、是否经常焦虑、受教育水平等。但和逻辑回归的结果相比,随机森林的recall还有略微降低。猜测是可能特征数量不够多的原因,导致树之间的差异不是很大,用随机森林的效果并不是很明显。上面两幅图是从随机森林中随机挑选的两个树,从结果中也可以看出,树之间的差异性不大,前几个分裂点都很相似,但模型输出的特征重要性还是比较有解释性的。
5.3Xgboost
图10XGBoost特征重要性排序
从上面模型评估的结果可以看出,XGBoost的效果目前看来是几个模型中最好的,recall达到了0.73,较前两个模型,有0.1的提升。通过模型输出的特征重要性,排在前5个的是所在省份、所处阶层、是否健康、认为社会是否公平、是否经常焦虑,属于个人特征和社会态度。
我们将XGBoost在测试样本中正样本的分类结果进行了分析,将判对和判错的样本在不同特征上的分布绘制了出来,结果如下:


图11XGBoost正样本预测结果分析
从上面的特征分布图可以看出,分错的样本并不是没有根据的。当一个人社会阶层低、经常抑郁或者焦虑、认为社会不公、家庭经济状况差的人,模型倾向于将其分为不幸福的。而那些被分错的样本在特征上和幸福的人更相似。
6.
本文研究了大众幸福度这一经典课题,基于个人特征,包括家庭情况,社会态度等,从比较微观的角度去解释影响一个人幸福度的相关因素。以上三种模型分别选出了最重要的5个变量,具体如下:
逻辑回归:社会是否公平、在同龄人中社会经济定位、是否经常焦虑、和三年前比社会经济地位发生的变化、是否有车。
随机森林:所在省份、社会是否公平、所处阶层、是否经常焦虑、受教育水平。
XGBoost:所在省份、所处阶层、是否健康、认为社会是否公平、是否经常焦虑。
以上,我们总结出一个人的个人情况、对社会的认同感这两方面的因素对个人幸福感的影响比较大,家庭情况对幸福度的影响略小一些,而这些都直接受到社会公平的影响。因此从微观到宏观,基于对个人幸福感的挖掘,我们总结出提高大众幸福度还需要从提高社会公平这一角度入手才能整体有效提高大众幸福度。
在研究方法中,本文主要对比了逻辑回归模型、基于树的模型,发现XGBoost效果在保证F1基本不变的情况下,有效的提高了 Recall;基于树的模型在保证模型解释性的前提下,能够使得模型分类性能有较大的提高。
7.
在项目过程中,我们遇到了如下几个问题:
(1)
(2)
(3)
(4)
