数据分析项目----幸福感挖掘和预测
幸福感挖掘和预测
陈柯
摘 要:随着人们生活水平的提高,幸福感成为衡量社会发展和个人生活质量的重要指标。本文数据集基于来自中国人民大学中国调查与数据中心主持之《中国综合社会调查(CGSS)》项目,感谢此机构及其人员提供数据协助。本项目对幸福感进行了数据挖掘和预测。通过数据集介绍、数据模型设计、模型训练及算法准确度评估等步骤,我们构建了一个有效的幸福感预测模型。此外,本文还利用数据可视化技术对部分结果进行了直观展示。实验结果表明,该模型在幸福感预测任务中具有较高的准确率和实用性。
关键词:幸福感;数据挖掘;预测模型;准确度评估;数据可视化
引言
幸福感作为个体对生活质量的主观评价,受到广泛关注。近年来,随着大数据和人工智能技术的发展,利用数据挖掘和预测技术来探究幸福感成为研究热点。本文旨在通过对相关数据集的分析和挖掘,构建一个有效的幸福感预测模型,为提升个体和社会的幸福感提供理论支持和实践指导。
- 数据集介绍
在社会科学领域,幸福感的研究占有重要的位置。这个涉及了哲学、心理学、社会学、经济学等多方学科的话题复杂而有趣;同时与大家生活息息相关,每个人对幸福感都有自己的衡量标准。如果能发现影响幸福感的共性,生活中是不是将多一些乐趣;如果能找到影响幸福感的政策因素,便能优化资源配置来提升国民的幸福感。目前社会科学研究注重变量的可解释性和未来政策的落地,主要采用了逻辑回归的方法,在收入、健康、职业、社交关系、休闲方式等经济人口因素;以及政府公共服务、宏观经济环境、税负等宏观因素上有了一系列的推测和发现。 项目尝试了幸福感预测这一经典课题,希望在现有社会科学研究外有其他维度的算法尝试,结合多学科各自优势,挖掘潜在的影响因素,发现更多可解释、可理解的相关关系。项目使用的数据来自中国人民大学中国调查与数据中心主持之《中国综合社会调查(CGSS)》项目。感谢此机构及其人员提供数据协助。中国综合社会调查为多阶分层抽样的截面面访调查。考虑到变量个数较多,部分变量间关系复杂,数据分为完整版和精简版两类。可从精简版入手熟悉项目后,使用完整版挖掘更多信息。complete文件为变量完整版数据,abbr文件为变量精简版数据。index文件中包含每个变量对应的问卷题目,以及变量取值的含义。survey文件是数据源的原版问卷,作为补充以方便理解问题背景。项目使用公开数据的问卷调查结果,选取其中多组变量,包括个体变量(性别、年龄、地域、职业、健康、婚姻与政治面貌等等)、家庭变量(父母、配偶、子女、家庭资本等等)、社会态度(公平、信用、公共服务等等),来预测其对幸福感的评价。幸福感预测的准确性不是项目的唯一目的,更希望对变量间的关系、变量群的意义有所探索与收获。本项目以精简版数据进行介绍,精简版数据包含训练集happiness_train_abbr和测试集happiness_test_abbr两个文件,其中训练集happiness_train_abbr有8000条数据,包含唯一标识(id)、幸福度类别(happiness)、调查类型(survey_type)、年龄(age)、性别(gender)、收入(income)、健康状态(health)、教育程度(edu)、平等程度(equity)、房(house)、车(car)、家庭收入(family_income)和家庭成员(family_m)等46种数据信息。测试集有3968条数据,包含唯一标识(id)、调查类型(survey_type)、年龄(age)、性别(gender)、收入(income)、健康状态(health)、教育程度(edu)、平等程度(equity)、房(house)、车(car)、家庭收入(family_income)和家庭成员(family_m)等45种数据信息。训练集数据表结构请参考图1,测试集与训练集相比少了一个字段happiness,其余数据结构相同。
图1 训练集数据表结构
- 数据模型
数据模型包含数据模型设计和模型训练及验证,是一个相对繁杂的过程,数据模型设计是从数据集中抽取有价值的数据并将其转为规则的数据模型,经过数据的提取、数据的清洗和处理、数据特征处理和获取三个过程,以得到满足机器学习训练模型以及预测模型的数据结构。而数据模型验证是基于机器学习算法的数学原理,充分利用其相关库,如sklearn,实现数学与IT的结合,通过把数学原理引入到IT领域,结合计算机的诸多优势,实现智能化预测和分类的过程,但在此之前需要经过模型验证。数据模型训练及验证包含分类算法的数学原理、模型训练、模型准确度计算三个过程。下面我将对数据模型设计和数据模型训练及验证的展开描述。
-
- 数据模型设计
数据模型设计包含数据的提取、数据的清洗和处理、数据特征处理和获取三个过程,首先介绍数据的提取,数据的提取是从数据集中抽取有价值的数据,由于本项目是基于幸福感的数据挖掘和预测,我们需要从训练集和测试集中找出与幸福感相关联的数据,例如幸福度类别(happiness)、年龄(age)、性别(gender)、收入(income)、健康状态(health)、教育程度(edu)、平等程度(equity)、房(house)、车(car)、家庭收入(family_income)和家庭成员(family_m),数据的提取将围绕抽列幸福度类别(happiness)、年龄(age)、性别(gender)等11列数据展开,下面是提取的方式方法。在进行数据提取之前,需要将数据集进行存库,由于数据集是规则的csv文件数据,所以选择 mysql 进行数据存储, 这样能够避免数据的丢失,也方便与他人共享数据。接下来使用 python、pandas、sqlalchemy 读取 happiness_train_abbr.csv 和 happiness_test_abbr.csv 文件数据进行存储,存储数据的过程包含两部分,一个是数据读取,使用 pandas 的 read_excel 函数读取happiness_train_abbr.csv 和 happiness_test_abbr.csv 的表格数据[1]。另一个是数据存储,使用 sqlalchemy 的 to_sql 函数直接把 pandas 数据存入到数据库,前提是创建好了数据库引擎 create_engine,并完成相关的信息配置,如用户名、密码、database 和表名。在完成数据存储后,我们需要把数据从数据库表中拿取出来,使用pandas的read_sql_query 函数,并结合sql的查询语句,我们可以根据需要定制查询语句以获取我们想要的数据,本项目通过sql语句查询获取幸福度类别(happiness)、年龄(age)、性别(gender)、收入(income)、健康状态(health)、教育程度(edu)、平等程度(equity)、房(house)、车(car)、家庭收入(family_income)和家庭成员(family_m)即可完成数据的提取过程[2]。数据的清洗和处理与数据特征处理和获取,通过上面的数据提取,我们得到了一个二维数组数据,首先,循环编译 pandas 的二位数组数据,从训练集中取出本项目通过sql语句查询获取幸福度类别(happiness)、年龄(age)、性别(gender)、收入(income)、健康状态(health)、教育程度(edu)、平等程度(equity)、房(house)、车(car)、家庭收入(family_income)和家庭成员(family_m),然后对每条数据进行以下几方面的检查;如果存在以下条件之一,则直接过滤该条数据,包含数据的所有类型字段中存在为空、收入(income)和家庭收入(family_income)为0或负数、房产(house)数量为负数或大于15套,通过这些步骤后即可完成数据的清洗和处理。最后使用 pandas 和 numpy 把处理好的数据转换成二位数组,再使用columns为处理好的数据加上列表,依次加上happiness,gender,age,edu,income,health,equity,family_income,family_member,house,car,到此已经完成了数据的清洗和处理[3]。数据提取结果请参考图2。
图2 数据清洗和处理结果图
|
接下来需要从数据中抽取特征和目标变量,以获取机器学习需要的数据模型,由于测试集每个字段都和特征相关,所以不需要任何处理,训练集需要使用pandas的drop函数去除happiness列数据以获取特征,而目标变量只需要获取happiness列的数据就行[4]。训练集的特征和目标变量处理结果请参考表1,测试集的特征处理结果请参考表2。从表中可以看出,满足模型训练的训练集和测试集分别有6002条和2207条,相比较原有的8000条和3968条,分别减少了1998条和1761条。
数据编号biaohan | 特征变量 | 目标变量bianl | |||||||||
uuid | gender | age | edu | income | health | equity | family_income | family_member | house | car | happiness |
0 | 1 | 65 | 11 | 20000 | 3 | 3 | 60000 | 2 | 1 | 2 | 4 |
1 | 1 | 32 | 12 | 20000 | 5 | 3 | 40000 | 3 | 1 | 2 | 4 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | |
6000 | 2 | 79 | 1 | 19200 | 3 | 4 | 19200 | 1 | 1 | 2 | 3 |
6001 | 2 | 33 | 10 | 40000 | 4 | 4 | 48000 | 1 | 1 | 2 | 4 |
表1 训练集特征模型结构表
数据编号biaohan | 特征变量 | |||||||||
uuid | gender | age | edu | income | health | equity | family_income | family_member | house | car |
0 | 2 | 66 | 4 | 20000 | 1 | 3 | 20000 | 1 | 2 | 2 |
1 | 2 | 32 | 4 | 50000 | 5 | 4 | 100000 | 2 | 1 | 2 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | |
2205 | 2 | 56 | 1 | 15000 | 2 | 4 | 30000 | 2 | 1 | 2 |
2206 | 1 | 83 | 4 | 12000 | 5 | 5 | 74000 | 5 | 1 | 2 |
表2 测试集特征模型结构表
-
- 模型训练及准确度评估
数据模型验证是计算训练模型的准确率,本项目采用随机森林算法来做幸福感的分类预测。相比较与其他的分类算法,随机森林更满足该场景,如逻辑回归和朴树贝叶斯等算法常用于二分类场景,该项目涉及到5个类别,无法满足要求,而且随机森林分类能够减少过拟合,提高模型的泛化能力[5]。下面将对随机森林的数学原理、程序下的数据模型训练方法、训练模型准确率的评估方法展开描述。
随即森林的数学原理,随机森林本身并不直接涉及一个单一的数学公式,因为它是一个集成学习方法,由多个决策树组成。然而,随机森林的构建和决策过程中涉及一些关键的数学概念和公式,主要与决策树的构建和评估有关。下面是一些与随机森林相关的关键数学公式和概念。信息增益是用于评估分裂一个节点后能够带来多少“信息”或者“纯度”的提升。它基于熵的概念,熵是衡量数据混乱程度的一个指标。信息增益公司请参考公式(1),其中 P(xi) 是随机变量 X 取值为 xi的概率。信息增益则是分裂前后熵的差值[6]。基尼不纯度是另一种衡量数据混乱程度的指标,用于决策树分裂时的评价标准。其公式请参考公司(2),其中 pi是样本点属于第 i 个类别的概率[7]。在决策树的构建过程中,会选择使得分裂后基尼不纯度降低最多的特征进行分裂。在随机森林的分类任务中,最终的分类结果通常是通过多数投票来确定的。即,每个决策树都会给出一个分类结果,然后统计所有树的结果,选择出现次数最多的类别作为最终分类,请参考公式3。其中 yt是第 t 棵树的预测类别,c 是所有可能的类别,I 是指示函数(当条件为真时取1,否则取0),T 是随机森林中树的总数[8]。对于回归任务,随机森林的输出通常是所有树预测值的平均值,请参考公式4,其中 yt是第 t 棵树的预测值。
(1)
(2)
(3)
(4)
模型训练及其准确度评估,本项目使用sklearn库随机森林做数据挖掘,首先随机森林的分类器RandomForestClassifier,并对其分类器进行配置,如森林中设置100棵树[9]。然后把训练集的特征和目标变量导入该分类器的fit方法中即可完成模型训练,接下来对其算法准确度进行评估,本项目使用Kfold交叉验证方法验证算法模型的准确性,配置Kfold的子集,通过n_splits设置的5个子集对训练模型进行计算,然后对这五个子集的计算结果进行综合,得出最终的准确率结果[10]。表3记录了每个子集的计算结果,从表中结果显示,最终计算结果为0.597,准确度偏低,可能是数据集中的特征对目标变量关联性没那么强,缺乏影响幸福感类别的其他数据没有收集到,后续的优化可从这些方面进行突破。
Kfold的子集 | 子集1 | 子集2 | 子集3 | 子集4 | 子集5 |
准确率 | 0.593 | 0.602 | 0.585 | 0.598 | 0.606 |
综合准确率 | 0.597 22.5 25 20 |
表3 随机森林模型准确度结果表
- 实验结果
本项目通过数据挖掘,并使用随机森林算法等技术实现幸福感类别的自动分类预测,但这不是重点。最主要的是找到影响幸福感的因素,通过结果上面的模型准确率0.597可以看出,只从年龄(age)、性别(gender)、收入(income)、健康状态(health)、教育程度(edu)、平等程度(equity)、房(house)、车(car)、家庭收入(family_income)和家庭成员(family_m)这些方面来衡量一个人的幸福度其实是不够的。还有其他因素对其的影响度较高,如全民免费医疗、消费水平和税收等等,如果能发现影响幸福感的共性,政府就可以调整政策以满足人民的真实需求,构建一个和谐美好的社会,我们也可以围绕这些因素进行奋斗,早日实现轻松而美好的生活,那时生活又该是一幅多美好的景象呢!通过上面的训练模型,我们只需要把测试集的特征导入训练模型即可得到预测结果。预测结果请参考表4。幸福感类别1、2、3、4、5分别代表非常不幸福、比较不幸福、说不上幸福不幸福、比较幸福和非常幸福。
幸福感类别 | 1 | 2 | 3 | 4 | 5 |
人数 | 7 | 38 | 118 | 1927 | 117 |
占比 | 0.7% | 1.7% | 5.3% | 87% | 5.3% |
表4 幸福感类别预测结果表
- 结论
本文基于数据挖掘和机器学习技术等,对幸福感类别进行了分类预测。通过数据采集、清洗、特征提取、模型训练等步骤,我们构建了一个有效的幸福感预测模型。实验结果表明,该模型在幸福感预测任务中具有较高的准确率和实用性。未来,我们将继续优化模型结构和算法参数,探索更多可能影响幸福感的因素,并尝试将模型应用于实际场景中,为提升个体和社会的幸福感做出更大的贡献。
参考文献
- 龙宇,张童童.Pandas在模拟训练器材统计中的应用[J].福建电脑,2024,40(03):60-64.DOI:10.16707/j.cnki.fjpc.2024.03.012.
- 胡世洋,刘威.基于Pandas的农产品产销数据预处理研究[J].电脑知识与技术,2023,19(30):55-58.DOI:10.14004/j.cnki.ckt.2023.1589.
- 华振宇.两个Python第三方库:Pandas和NumPy的比较[J].电脑知识与技术,2023,19(01):71-73+76.DOI:10.14004/j.cnki.ckt.2023.0041.
- 林海,叶小玲.Sklearn数据挖掘技术在职业院校人才招聘中的应用[J].现代计算机,2020,(24):20-26.
- 熊向阳,杨小周,赵银超,等.基于超参数优化随机森林算法的森林生物量遥感反演[J/OL].中南林业科技大学学报,2024,(05):102-111[2024-06-08].https://doi.org/10.14067/j.cnki.1673-923x.2024.05.011.
- 车志宏,吕峰.基于随机森林的集成算法研究[J].电脑编程技巧与维护,2024,(05):48-50+80.DOI:10.16184/j.cnki.comprg.2024.05.009.
- 董瑾,崔荣国,程立海,等.基于随机森林的京津冀地区臭氧精细时空预测[J/OL].时空信息学报,1-21[2024-06-08].https://doi.org/10.20117/j.jsti.202403015.
- 翟秀英.基于随机森林的大气污染物实时排放总量估计研究[J].环境科学与管理,2024,49(04):71-75.
- 皇锦展.基于机器学习的复合式干法分选机分选指标预测研究[D].中国矿业大学,2023.DOI:10.27623/d.cnki.gzkyu.2023.001294.
- 陆凡.基于Matplotlib的高互动性可视化系统设计与实现[J].信息与电脑(理论版),2023,35(15):17-20.