首页 > 其他分享 >基于餐厅消费数据的隐形资助研究|校内数模竞赛分享

基于餐厅消费数据的隐形资助研究|校内数模竞赛分享

时间:2023-05-27 18:36:15浏览次数:36  
标签:消费 校内 资助 模型 隐形 数模 附件 学年 数据

前言

幸亏校赛当做期末考试,才第一次这么认真点去审视一道建模同题目,前期的莽撞,对数据无奈是很崩溃的。另寻它解或是坚持耕耘都可以作为这次建模收官的关键词,因为它们真的都同时存在,并且不相上下。 由于这是一道有关我们"本家"————大数据的题目,我们把数据处理当做了一个比较重要的组成部分,并且按照问题分析与模型建立,数据预处理及特征提取,四问题分别作答,以及模型的评价与改进的具体思路去完成。 本篇博客目的是记录我的第一次正式完成数学建模的过程,算作总结,相关顺序流程纯粹心理活动,正八经的论文的具体内容和所有相关数据以及用到的代码,我放在我的github,欢迎大家访问。

备用github访问地址

题目介绍

近年来,随着精准资助的开展,如何准确判定高校家庭经济困难学生、切实完善精准资助手段,对高校资助工作具有重要意义。隐性资助是通过大数据挖掘的形式,找准家庭经济困难学生的行为或经济状况特征,隐形认定(识别)出困难学生,并通过隐形实施的方式(不评比,不公示)给予适度的资助补偿,以保护家庭经济困难学生隐私,助力实现教育公平。随着信息化水平的提高,学生部分消费数据(如食堂三餐消费)有效记录并留存。通常认为学生经济情况可以通过餐厅消费金额、消费品类与消费次数等信息间接反映。某管理部门仿真了一组学生的消费数据。请建立数学模型解决如下问题:

  1. 附件0是性别信息。附件1-3是该组学生不同学年的日三餐餐厅消费金额数据记录(部分),附件4-7同时给出了其中部分同学的饮食种类信息。请你的团队针对这些数据建立模型,挖掘不同代表性群体,并定量分析该群体三学年的主要消费行为特征变化规律、饮食种类变化规律等。注意建模前需对数据进行必要预处理(如删除不相关数据、缺失补全、特征提取等)。
  2. 除以上信息外,附件8给出部分同学第一学年后经其它方式认定的贫困程度等级(粗粒度),其中等级2准确(可能不全)、其它等级认定可能有少量偏差。请建立数学模型依据消费行为(附件1-3)预测贫困程度,补全附件9(不要改动附件9的已有数据及顺序)并作为附件提交;进一步结合第1问研究结论预测该组同学第二、第三学年的贫困程度隐形认定等级,分析相关变化。
  3. 在第2问基础上,结合附件4-7饮食种类数据,改进你们的预测模型,比较分析相关同学的预测结果变化情况。
  4. 通过以上贫困生本质特征挖掘,构建差异化(细粒度)资助额度分配算法,并以第三学年为例给出具体结果:对象为附件4-7中涉及的同学、资助总金额10万、资助人员80名,并对资助结果的公平合理性进行评估。

附件0 性别标签; 附件1 第一学年消费数据; 附件2 第二学年消费数据; 附件3 第三学年消费数据; 附件4-7 部分同学的三学年饮食种类信息; 附件8 已知贫困标签; 附件9 贫困标签待补全名单(问题2)。 注1:提供的所有数据表中同一序号是代表同一个人。 注2:数据中金额的单位为“分”。

第一节 问题分析与模型假设

问题分析

在开始解题之前,我们首先对数据进行了预处理,以及特征提取。从附近1-3中提取出全体学生三年来的消费特征,从附件4-7中提取出部分学生的消费金额特征及食物种类特征,用于后续的模型构建。 对问题一,我们采用k-means算法,对第一学年的学生进行聚类,然后计算这些群体的三年的消费特征的均值,绘制图表,来体现这些群体三年来的消费特征变化。 对问题二,我们构建XGBoost模型,同时使用交叉验证、启发式算法寻优来提高模型的精确度。利用附件8的数据进行模型训练,对附件9中的同学进行预测。并且对全体同学第二三学年的贫困程度进行预测。 对问题三,我们将附件4-7中提取到的新的特征一起纳入模型的指标体系中,使得模型的预测更加准确。 对问题四,我们利用熵权法对第三学年学生的各个指标赋权重,并进行综合评价,计算其综合得分。得到每个学生的贫困程度得分后,我们将资助金额进行线性插值,得到贫困程度在前80位的同学的资助金额分配。

模型假设

其实在一开始,对于问题的分析真就是丰富多彩,极具想象力,但回归现实来讲,以下模型假设已经算是完备了

假设每位同学的餐厅消费记录都是自己本人的真实消费记录,不考虑为同学带饭、餐卡丢失被盗刷等情况。 假设通过熵权法得出的权重能够有效地反映各个特征的重要性。 假设学生的贫困程度(综合评价得分)和他们应得的资助金额之间存在线性关系。即学生的贫困程度每增加一个单位,学生应得的资助金额也会增加一个固定的单位。 在应用熵权法时,假设所提起到的各个特征是独立的,即它们之间没有相关性。 我们假设所有学生得到资助的权利是公平的,即他们得到的资助金额应该基于他们的贫困程度,不考虑其他因素,如学习成绩、行为表现等。 假设所提供的数据是完整且准确的。

我们的假设更多是基于别人论文中此类数据的一般看法,除过第一条纯纯不想处理些消费数据中的异常值。

第一节 数据预处理和特征提取

还是像开篇所讲,我们很尊重这部分内容,并且的确在此花了不少时间和精力去实现。我们本着尽量用excel处理的原则,如果数据用excel处理出现问题,则转向matlab。

附件1-3的

由于是贫困自助问题,所以我们认为大部分人不在校就餐时间,也就是假期或其他特殊情况,数据并不具备很好的参考价格,所以如果当天消费(3列)为0值的占比超过90%,那么我们去除掉当天数据(3列)。

实现是基于matlab求出所要删除列,后面在excel上用了一段VB的代码,但实际上我觉得你手删都行,反正数据很集中,行排一下也不是不行。不用matlab完成所有步骤是因为变量矩阵里面没办法放字符串类型,所有只将数据放进去了,导致上面日期文本就没了,很可惜。

我们基于处理后的“全年”数据(虽然前面对于特殊情况的处理会去掉一些天数,但我们后面对全年的命名并没有更改,主要是为了方便,其实可以理解为“有效全年数据”),提取了以下特征: image.png

基本上特征的提取全部用excel自带的函数AVERAGEIF(S)、COUNTIF(s)等实现,至于像是全年日消费波动性只能求救matlab,主要是因为计算日消费波动性,先要把三餐消费合为当天消费,excel没有想到对应的实现办法,极差和上、下四分位点也用matalb,无他,好算。

附件4-7的

虽然有很多待定值,以及像是图书馆,游泳池等异常值,但我们仍然把它当做为有效数据,只是当成在这里,或说这个东西的消费,所以没有将它们剔除,只是对附件4-7中的饮食种类为空的行进行删除。 同样的,在处理后的附件4-7合并表,提取了以下特征: image.png

这部分特征的提取全部基于excel的Power Query实现,该说不说的,第一次用,确实比matlab代码是要好太多,效率蹭蹭涨,很推荐。

另外讲,之前想到附件1-3已经有了对早、中、晚的消费描述,那附件4-7的具体消费怎么去划分,纠结了,还想着要不要严谨点,做个散列分布的一个图,后面才察觉应该是没得必要,应该没有下午三点的早餐,一两个临界值并不影响最后的分析结果。

第三节 具体求解

论文中能写到的东西已经是我们对于求解所能达到的最高高度,但我仍然觉得spsspro对论文完成有着很大作用,先去确定,然后转去写代码,而不是模型代码写一堆,最后发现不可取。

第四节 其他

原本以为好像要很大心力去完成这篇博客,其实写着写着发现也就是吐槽和欣赏,真正成果还是建议去github上阅读,会好很多。 何况其实槽点在于模型假设和数据预处理上面,excel绝对够逼疯,但也确切体会到了这个本来就知道强大的excel的部分强大。 其次,我们本着高大上(使劲吹)的原则,把摘要和其他文字说明讲得很有意义,但不代表论文真的有很高的实际价值,请自我认真甄别。

标签:消费,校内,资助,模型,隐形,数模,附件,学年,数据
From: https://blog.51cto.com/u_16010099/6362782

相关文章

  • 利用函数模板解决双倍功能 利用类模板解决绝对值功能 vector应用测试
    请使用模板参数设计实现双倍功能函数,函数功能要求实现返回值为输入参数的两倍,函数参数应能适应整型、浮点型、双精度型等各种类型,返回值类型与参数一样。裁判测试程序样例: #include<iostream>usingnamespacestd;/*请在这里填写答案*/intmain(void){charc='\0';......
  • 优化振弦读数模块开发的几个步骤
    优化振弦读数模块开发的几个步骤 要优化振弦读数模块的开发,可以考虑以下几点:1.选用合适的硬件设备:选择合适的传感器和芯片,以确保数据的准确性和稳定性。2.优化数据采集:采用合适的采集算法并进行优化,以确保数据的精度和稳定性。3.提高模块的可靠性:在设计模块时,考虑到环境......
  • 24K‘膜’出爱车铠甲 释放车主无限魅力,引领隐形车衣潮流!
    隐形车衣的市场经过野蛮生长,年轻一族的消费者们有自己独特的追求和喜爱,拥有自己的一辆汽车后,去贴一张合适的漆面保护膜(隐形车衣),已成为众多车主的必备选择,这也使得24k汽车膜隐形车衣真正成为普通消费品,十分火爆,赢得业界好评。“24k汽车膜”质量不服输,精益求精引关注在当今市场车膜品......
  • final函数模板
    #include<iostream>#include<cmath>usingnamespacestd;classPoint{ private: doublex; doubley; doublez; public: Point(doublea,doubleb,doublec):x(a),y(b),z(c){}; frienddoubleoperator-(Point,Point);};template<classT>double......
  • 数组排序输出(函数模板)
    对于输入的每一批数,按从小到大排序后输出。一行输入为一批数,第一个输入为数据类型(1表示整数,2表示字符型数,3表示有一位小数的浮点数,4表示字符串,0表示输入结束),第二个输入为该批数的数量size(0<size<=10),接下来为size个指定类型的数据。输出将从小到大顺序输出数据。函数接口定义:sor......
  • 数模混合设计的LVS流程
    数模混合设计的LVS流程1.前言最近项目到了验证环节,在做LVS碰到了一些问题。网络上也没有文章给出完整的解决方案,自己试了一下,踩了一些坑之后基本上搞定了这个问题,现记录流程供学习交流。整体流程包括:数字模块单独LVS,模拟模块单独过LVS,数字网表反提原理图,顶层数字symbol处理,原......
  • pta_6-1 数组排序输出(函数模板)
    #include<iostream>#include<string>usingnamespacestd;template<classT>voidsort(T*a,intsize){intr,i,j;for(i=0;i<size;i++)cin>>a[i];Tt;for(r=size/2;r>=1;r/=2)for(i......
  • 6-1 数组排序输出(函数模板)
    6-1数组排序输出(函数模板)分数 10全屏浏览题目切换布局作者 何振峰单位 福州大学对于输入的每一批数,按从小到大排序后输出。一行输入为一批数,第一个输入为数据类型(1表示整数,2表示字符型数,3表示有一位小数的浮点数,4表示字符串,0表示输入结束......
  • 利用函数模板解决双倍功能
    请使用模板参数设计实现双倍功能函数,函数功能要求实现返回值为输入参数的两倍,函数参数应能适应整型、浮点型、双精度型等各种类型,返回值类型与参数一样。#include<iostream>usingnamespacestd;/*请在这里填写答案*/template<typenameT>TDouble(Tx){return2*x;}in......
  • python基础学习-hashlib - 哈希函数模块
    hashlib-哈希函数模块参考地址:Python-Core-50-Courses/第20课:Python标准库初探.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)待补充......哈希函数又称哈希算法或散列函数,是一种为已有的数据创建“数字指纹”(哈希摘要)的方法。哈希函数把数据压缩成摘要,对......