2017年高教社杯全国大学生数学建模竞赛题目 B题 “拍照赚钱”的任务定价_2017拍照赚钱-程序员宅基地

技术标签: 大学生数学建模  R语言  

    “拍照赚钱”的任务定价分析

 “拍照赚钱” 是一种需要会员在APP上领取任务,完成后赚取对任务所标定的酬金的自助服务模式,这种APP中任务定价是其核心要素。通过对“拍照赚钱”的任务定价方案进行分析评价与改进及任务打包方案的优化,以达到节省成本并提高任务完成度的目的。

 针对问题一,通过对附件一任务定价数据进行分析,可以看出任务评价的平均定价为69.11,任务定价范围为[65,85]。分析任务未完成原因时,首先,计算出未完成任务占比为37.9%。其次,画出任务完成情况与任务定价箱线图,未完成任务的定价低于完成任务的定价。最后,在地图上标出任务完成情况,可以看出,未完成任务主要集中在区域一,区域二的完成度最高。

 针对问题二,筛选出附件一中任务已完成的数据作为训练集,任务未完成的作为测试集。通过经纬度把附件一和附件二联接起来,建立以任务定价为因变量的线性回归模型,用所建立的模型对原方案中未完成任务的定价进行预测分析,所得预测值就是新的定价方案。出新方案比原方案的完成率提高了11.87%。

 针对问题三,根据任务位置和会员位置经纬度信息计算每个会员到每个任务点的距离,结合每个会员的任务限额,并参考会员的信誉度,对任务进行分配打包,

针对问题四,针对问题四,要对附件三的新项目制定任务定价方案,首先运用问题三得到的约束条件公式对附件三的数据进行打包发布,可以打包成300个,对这300组数据进行预测分析,得到的一组任务定价。为了得知方案的好坏,再做一组对比项。使用附件三的数据,不打包直接发布,套用问题二建立的模型进行预测分析,得到新的任务定价。对两次任务定价分别求总值,比较后发现打包发布的方案成本更低,所以这个结果更合理。

通过对“拍照赚钱”的任务定价进行分析得知打包发布任务成本更低方案更合理。

关键词:多元线性回归,任务定价,任务打包,R语言

一、问题重述

 “拍照赚钱”是一种用户下载APP并成为会员,然后在APP上选择做任务赚取酬金的自助服务模式。这种基于互联网的自助式劳务平台以APP为运行的核心,而APP中的任务定价又是其核心要素。如果定价不合理,就会导致部分任务领取率低,从而使商品检查失败。这种平台比传统的市场调查方式更加有可取性,它更加便于调查,不仅可以节约成本,还能使数据更加的真实有效。但是该APP最为重要的是对任务的定价。如果定价不合理,有的任务就会无人问津,而导致商品检查的失败。根据附件所给数据完成下面问题:

  1.  研究任务定价规律,分析任务未完成的原因。
  2. 为项目设计新的任务定价方案,并和原方案进行比较。
  3. 对任务进行打包发布。并修改前面的定价模型,对最终的任务完成情况又有什么影响?
  4. 对附件三中的新项目给出你的任务定价方案,并评价该方案的实施效果。

二、问题分析

2.1问题一的分析

问题一主要分析两个方面,一是研究任务定价的规律,首先,利用附件一任务数据画出任务定价的分布图,可以直观地展现任务定价的分布情况,再计算出任务定价的均值和中位数,用来刻画定价规律。二是通过对完成和未完成任务的对比分析,找出未完成任务的原因,通过对任务完成情况与任务标价之间的关系进行统计描述,以及对任务标价与任务完成度之间的地理位置关系进行描述分析,分析出未完成任务的原因。

2.2问题二的分析

建立模型时,先根据附件一提取出任务已完成的数据作为训练集,然后结合附件一和附件二中任务完成情况为1的变量,结合附件二中的会员的数据,求出任务与会员之间的距离,得到任务距离小于5km的变量,结合附件一中的数据统计出已完成任务的变量,以任务定价为因变量,以其余变量为自变量,建立多元线性回归模型,针对已得到的数据运用R语言得出多元回归系数表。最后,用所建立的模型针对原方案中未完成任务的数据进行预测分析,这些预测得到的数据就是新的任务定价方案。要对新方案和原始方案进行比较,分析新的任务定价后的完成度与之前的任务完成度进行对比分析。。

2.3问题三的分析

对于问题三,根据附件一中的任务地理位置信息和附件二中会员的地理位置信息画出任务和会员位置分布的散点图,根据图中任务和会员之间的距离,探究任务打包的方案。也即是根据任务位置和会员位置经纬度信息计算每个会员到每个任务的距离,结合每个会员的任务限额,参考会员的信誉度,给出任务分配方案,最后,利用问题二的方法,给打包后的任务重新定价。

2.4问题四的分析

要对附件三的新项目制定任务定价方案,首先可以运用问题三得到的约束条件公式对附件三的数据进行打包发布,对打包后的数据进行预测分析,得到的预测值为任务定价。此时没有对比项,无法确定方案的好坏,针对这种情况,可以再做一组对比项。使用附件三的数据,不进行打包直接发布,套用问题二所建立的模型进行预测分析,得到新的任务定价。对两次的任务定价分别求总值并进行对比,得到更合理的方案。

三、模型假设

1.假设任务分布数小于5的城市不考虑。

2.假设不考虑一个任务分给几个人做。

四、符号说明

五、模型的建立与求解

5.1问题一的模型建立与求解

5.1.1任务定价规律

根据附件一的任务定价数据,计算出任务定价的均值和中位数,并画出任务标价分布直方图如下:

由上图可知任务定价的范围为[65,85],且已结束的任务中定价主要集中在65-75之间,而定价75以上的任务数量较少。

5.1.2 未完成因素分析

   对附件一数据中任务执行情况进行统计分析,得到任务完成情况图如下:

由图5-2可以看出未完成任务占总任务的37.49%,为了更加分析未完成任务与完成任务在任务定价方面的差异,画出任务完成情况与任务定价的箱线图。

从图中可看出,未完成任务与已完成任务在任务定价上的差异较大,已完成的任务定价比未完成的任务定价更高。

为了观察任务定价与任务所中地理位置之间的关系,结合附件一中任务的经纬度数据,利用地图慧,将任务完成情况中地图中标记出来,如下分布图:

可以看出图表5-4中区域二中的任务完成度最高,区域三中的任务完成度最低。为了研究区域与任务完成度的关系,可以查找中国地图,结合经纬度确定任务分布城市,然后运用Excel得出与每个城市任务平均定价与该城市任务达成率之间的关系如下图:

从上图可以看出任务最多的城市为广州市,深圳、佛山和东莞任务数量差别不大;而在任务定价方面深圳的最低,佛山最高;在任务完成情况方面,深圳地区任务完成率最低,东莞的完成率较高。

    综合上述分析,得出任务未完成的原因是任务定价太低,例如深圳市平均定价较低导致任务完成度低。

5.2问题二的模型建立与求解

5.2.1模型的建立

首先把附件一中已完成的任务数据作为训练集;未完成的数据作为测试集;对附件二的会员数据,计算出会员与任务的距离,将距离在5km以内的会员个数,会员占比,会员限额,和城市分布的变量值;建立以任务定价为因变量,以任务距离在5km以内的会员个数,会员占比,会员限额和城市分布为自变量的多元回归模型:

5.2.2模型的求解

将附件二会员信息数据的信誉值排名前20%的会员定义为VIP会员,后80%定义为普通会员。

考虑到每个任务点与所有会员的距离都不同,因此计算每个任务点到所有会员位置的距离。

根据会员与任务2个经纬度点,计算这2个经纬度点之间的距离:

其中:

其中: 为地球半径,可取平均值6371km; , 表示两点的纬度; 表示两点经度的差值。

得到任务距离小于5km的会员总人数和VIP会员人数与会员总人数之比。如下表:

将表格5-1中得到的变量与附件一中提取的已完成任务的数据进行合并,得到任务完成情况都为1的样本变量,然后进行多元线性回归的求解。

建立以任务价格为因变量与5km内会员个数、会员占比、会员限额、城市为自变量的多元线性回归模型。

由上表可得:会员个数的系数为负,说明会员个数越多,任务的定价越低,其他类似;城市以东莞为基础,佛山的系数为正,广州和深圳的系数为负,说明佛山的任务定价最高,深圳的定价最少。F统计量p值小于0.001,说明模型是显著的。调整后的可决系数为31.59%,说明所选择的自变量可以解释31.59%的Y。

5.2.3模型的预测

运用R语言利用建立的模型针对任务一中未完成任务的定价进行预测分析,得到一组预测值,这个预测值就是新的定价方案。

对原有方案与新的定价方案进一步比较,分别对附件一中未完成任务定价与新定价方案的预测数据进行统计整理,分别得到两种方案的任务定价分布:

                             图5-7 两种方案的任务定价分布对比

 通过对两组分布图的对比,发现原始方案未完成任务定价普遍较低,而新的定价方案近似服从正态分布,基本上说明新的方案定价更加合理。再分别计算出两种方案的完成率和任务的成本均值,对两种方案进行比较。

通过比较得出新方案比原方案的完成率提高了11.87%。原方案的成本为57552.5,新方案的成本为57488.9,成本降低了63.6元

5.3问题三的模型建立与求解

5.3.1 制定打包规则

(1)根据附件一的任务位置信息和附件二中会员位置信息的分布情况如下:

                           图 5-8 任务位置与会员位置地理位置分布

从图可以看出,任务位置比较集中,且与会员位置与会员的重叠部分较多,这将会导致多个会员对同一个任务的竞争比较激烈,也会导致一个会员同时做多个任务,这都说明对任务进行打包是很有必要的。

(2) 计算每个会员到每个任务的距离, 表示第i个会员到第j个任务的距离。

(3) 结合每个会员任务限额相,构造任务分配系数:

若会员i的任务限额越大,且距离任务j的距离较小,第j个任务越可能分配给会员i。则此时的 较大。若 相同,任务则分配给信誉度高的会员。

结合附件二和附件一数据中会员任务限额和会员位置与任务位置之间的距离 带入打包系数得到下列表格(节选):

(4)打包的任务数不能大于任务限额,且对打包系数进行求和得最大值,由此建立约束条件:

通过约束条件可以将任务进行打包,但原有的定价不适合任务打包后的现状,所以需要建立新的定价模型。由于打包的任务数不同价格也不尽相同,对此建立如下模型:,其中:

5.4问题四的模型建立与求解

运用问题三打包原理对附件三的数据进行打包发布,并对打包后的任务定价进行预测分析。

5.4问题四的模型建立与求解

运用问题三打包原理对附件三的数据进行打包发布,并对打包后的任务定价进行预测分析。

将附件三的数据,按照不进行打包直接发布,和打包后再发布进行对比分析。

图表 5-9两次方案任务定价总值比较

 完成度相同情况下,打包发布成本更低,因此对于企业来说,打包发布方案更加合理。

 

六、模型的评价,改进与推广

6.1模型的优缺点

6.1.1 模型的优点

(1)文章的原创性强,文章中的大部分模型都是自行推到建立的。

(2)解决问题二时选用已完成任务作为训练集,建立多元线性回归模型,针对未完成任务进行预测,得到预测值作为新的任务定价,从而大大提高了整体任务完成率。

(3)解决问题时,由于数据量过大,不便于统计分析,于是充分利用R语言和Excel对数据进行处理,减少了运算量,增加了结果的可信度。

(4)通过对问题的分析,合理地将问题进行模块化处理,使问题明朗化,并在一定程度上将其进行了简化。

6.1.2模型的缺点

(1)进行研究时,不能将所有的影响因素纳入计算,依然存在统计偏差。

七、参考文献

[1]薛薇,基于R的统计分析与数据挖掘,北京:中国人民大学出版社,2014.4

[2]王汉生,应用商务统计分析,北京大学出版社,2008.1

[3]叶其孝,姜启源等译,数学建模,北京机械工业出版社,2014.10

[6]马莉:MATLAB 数学实验与建模,清华大学出版社2010年版

[7]束金龙、闻人凯,柴俊:线性规划理论与模型应用,科学出版社2007年版

 

八、附录

问题一

1.任务定价规律

install.packages("readxl")

library(readxl)

task=read_xls("附件一:已结束项目任务数据.xls")      ##读取附件一数据

summary(task)

hist(task$任务标价,ylim=c(0,350),ylab="任务数量",xlab="任务标价",main="",col="lightblue")                           ##直方图

2. 未完成因素分析

a=factor("未完成","完成")

boxplot(task$任务标价~task$任务执行情况,xaxt="n",ylab="任务标价",xlab="完成情况",col="lightblue")axis(1,at=c(1,2),labels=c("未完成","完成"))                                          ##箱线图

问题二

1.衍生变量的生成

require(geosphere)

member=read_xlsx("附件二:会员信息数据.xlsx")             ##读取附件二数据

###############################数据预处理######################

summary(member)

outliers=member[round(member$lon,2)==23.03,]

newmember=member[member$会员编号!="B1175",]             ##删除异常值

summary(newmember)

#################################衍生变量######################

number=data.frame()

for(i in 1:dim(task)[1]){

show(i)

i=1

single_distance=data.frame()

for(a in 1:dim(newmember)[1]){

data=as.matrix(rbind(task[i,2:3],newmember[a,2:3]))

distance=distm(data,fun=distVincentyEllipsoid)

single_distance[a,1]=distance[1,2]

}                                                   

single=cbind(newmember,single_distance)              ##附件一中某任务与所有会员的距离

a2=single[single$V1<5000,]

number[i,4]=nrow(a2)                                 ##任务5km内会员数

number[i,5]=mean(a2[,7])                             ##高级会员数

number[i,6]=sum(a2[,4])                              ##任务配额总数

head(number)

write.csv(number,"衍生变量.csv",row.names=F)

 

R语言建立价格与5km内会员个数、5km会员占比、5km会员限额、城市的模型

getwd()

library(readxl)

data1=read_excel("F:/衍生变量全.xlsx")

data=data1

str(data)

data$城市=as.factor(data$城市)

data$会员占比=as.numeric(data$会员占比)

data[,1]=scale(data[,1],center=T,scale=T)

data[,2]=scale(data[,2],center=T,scale=T)

data[,3]=scale(data[,3],center=T,scale=T)

data[,4]=scale(data[,4],center=T,scale=T)

xunlian=data[data$任务执行情况=="1",]

ceshi=data[data$任务执行情况=="0",]

str(ceshi)

model=lm(任务标价~.-任务执行情况,data=xunlian)

summary(model)

yuce=predict(model,ceshi)

sd=sd(data1$任务标价)

mean=mean(data1$任务标价)

yuce=sd*yuce+mean

head(yuce)

ceshi_1=data1[data1$任务执行情况=="0",]

yuce=cbind(ceshi_1,yuce)

head(yuce)

sum(yuce$yuce)

sum(yuce$任务标价)

预测分析

hist(data$任务标价,xlab="原始任务定价",ylab="任务数量",col="lightblue",ylim=c(0,200),main="")

hist(yuce$yuce,xlab="预测任务定价",ylab="任务数量",col="lightblue",ylim=c(0,200),main="")

问题四

第四问任务与任务间的距离

install.packages("readxl")

library(readxl)

require(geosphere)

task=read_xls("附件三:新项目任务数据.xls")

dim(task) 

task1=data.frame(task[,3],task[,2])

summary(task)

str(task1)   

distance=distm(task1,fun=distVincentyEllipsoid)

head(distance)

write.csv(distance,"第四问任务与任务间的距离.csv",row.names=F)

打包

setwd("C:/Users/lenovo/Desktop/数学建模/B")

data1=read.csv("第四问任务与任务间的距离.csv")

data=data1

dim(data)

dabao=data.frame()

 

for(i in 1:15){

show(i)

a=data[data[,i]<1000,]

a1=nrow(a)

if(a1<=7){

a1=a1

a3=row.names(a)

} else {

a1=7

a2=paste(row.names(a[1:7,]),collapse=" ")

a3=row.names(a[1:7,])

}

dabao[i,1]=a1

dabao[i,2]=a2

a3=as.numeric(a3)

data=data[-a3,]

}

dim(dabao)

write.csv(dabao,"打包bucf.csv",row.names=F)

任务与会员间的距离

install.packages("readxl")

library(readxl)

require(geosphere)

task=read_xls("附件三:新项目任务数据.xls")

dim(task) 

task1=data.frame(task[,3],task[,2])

summary(task)

str(task1)   

member=read_xlsx("附件二:会员信息数据.xlsx")             ##读取附件二数据

summary(member)

outliers=member[round(member$lon,2)==23.03,]

newmember=member[member$会员编号!="B1175",]             ##删除异常值

summary(newmember)

number=data.frame()

names(task1)=c("lon","lat")

dim(task1)[1]

for(i in 1:2066){

show(i)

single_distance=data.frame()

for(a in 1:dim(newmember)[1]){

data=as.matrix(rbind(task1[i,1:2],newmember[a,2:3]))

distance=distm(data,fun=distVincentyEllipsoid)

single_distance[a,1]=distance[1,2]

head(single_distance$V1)

number[1:1876,i]=single_distance$V1

}

dim(number)

write.csv(number,".csv",row.names=F)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tong_0xue/article/details/89575046

智能推荐

Python从入门到精通,100天就够了!(1)——Python初体验-程序员宅基地

文章浏览阅读2.8k次,点赞12次,收藏37次。文章目录从小白到半个程序员Python初体验Python语言元素之变量Python语言元素之运算符从小白到半个程序员​ 毫无疑问,Python是当下最火的编程语言之一,根据TIOBE编程语言排行榜(TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎如Google、Bing、Yahoo! 、Wikipedia、Amazon、YouTube和Baidu统计出排名数据,反映某个编程语言的热门程度)显示,Python 以 2.01% 的正增长荣获 2020 年度 T

QML粒子系统制作心形效果-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏8次。说明:虽然 5 月 20 号过了,还是把来画下心。为什么是绿色的?爱情长青!!!这里我用的QML的粒子系统。粒子模拟的核心是 ParticleSystem 控制共享时间线的。一个场景可以有多个粒子系统,每个粒子系统都有一个独立的时间轴。使用 Emitter 元素发射粒子,并使用使其可视化,元素 ParticlePainter 可以是图像,QML Item 或着色器 Item。发射器还使用矢量空间提供粒子的方向。发射的粒子不再可以由发射器操纵。粒子模块提供 Affector,可以在发射粒子后操纵粒子的

解决linux用户切换失败 su:execute /usr/bin 没有权限-程序员宅基地

文章浏览阅读4.7k次。问题描述:回宿舍前,在root用户中安装fish,并修改其shell为fish。回宿舍之后,在图形界面用root用户进行登陆,莫名其妙登陆失败。没有任何提示信息,直接回到登陆界面。用非root用户登陆后,执行su root命令切换到root用户,报错:su execute /usr/bin/ 权限不够。经过了一番查询,网友们的操作是将/usr/bin目录权限修改为777,还有一些我看不懂的...

Unity动态批处理测试总结;发现2018版本存在BUG有时候无法正常动态批处理_totalbatches-程序员宅基地

文章浏览阅读238次。Unity动态批处理测试总结;发现2018版本存在BUG有时候无法正常运行1、1摄像机2Cube时分析总结:所以研究2个参数:①Setpass Call :像机照射范围内,所有GameObject所包含的Material种类数量(不准确但是易于理解);②Batches:我们出现上面的SetpassCall不高这个却很高,因为有些游戏对象不能被Unity 内置的Batch功能自动合并时【不满足Unity的Dynamic batch的要求】,就会很高。比如1类物体很多2、DrawCall对比:1摄像_totalbatches

the component of reactjs-程序员宅基地

文章浏览阅读347次。react的组件之间的传值可以有三种情况,分别是(1)父组件——子组件 主要利用props属性(2)子组件——父组件 借助于函数的传递,利用了类似的回调函数(3)兄弟组件之间的值传递 第三方思想PubSub (还有就是子1->父,父->子2)下面的程序演示了如上三种情况 var Commsg = React.createClass({_the component of

Simple-Mult-SSM 基于Simple-SSM扩展Hessian注解的javaweb前后端分离SSM基础框架-程序员宅基地

文章浏览阅读122次。github地址https://github.com/FaceGhost/Simple-Mult-SSM基于Simple-SSMhttps://github.com/FaceGhost/Simple-SSM开发版本jdk1.7spring 4.2.4mybatis 3.2.8hessian 4.0.38开发工具:eclip...

随便推点

Linux下CPU的手动频率设定 CPU电源策略模式_linux桌面设置cpu电源模式-程序员宅基地

文章浏览阅读1.2k次。http://www.51testing.com/html/20/n-3723920.html_linux桌面设置cpu电源模式

Centos7离线安装mysql8-程序员宅基地

文章浏览阅读2.2k次。linux版本:Centois7mysql版本:5.7一、安装1、下载mysql离线安装包下载地址:https://dev.mysql.com/downloads/mysql/选择如下:【Red Hat Enterprise Linux 7 / Oracle Linux】【Red Hat Enterprise Linux 7 / Oracle Linux 7..._centos7mysql8安装

LAMP框架(一)_集成环境lamp server中,l代表()操作系统,a代表()web服务软件,m代表()数据库…-程序员宅基地

文章浏览阅读453次,点赞6次,收藏3次。LAMP环境搭建L 代表服务器操作系统使用LinuxA 代表网站服务使用的是Apache软件基金会中的httpd的软件M 代表网站后台使用的数据库时MySQL数据库P 代表网站是使用PHP/Perl/Python等语言开发安装MySQLMySQL是一个关系型数据库,由mysql ab公司开发,目前属于oracle公司产品..._集成环境lamp server中,l代表()操作系统,a代表()web服务软件,m代表()数据库…

使用vscode 打开vue项目报错 XXX packages are looking for funding run `npm fund` for details_vue12 packages are looking for funding-程序员宅基地

文章浏览阅读2.2w次,点赞6次,收藏6次。XXX packages are looking for funding run `npm fund` for details输入npm install报错:60 packages are looking for fundingrun npm fund for details解决npm fundnpm run dev转载:https://blog.csdn.net/qq_37916164/article/details/110120810_vue12 packages are looking for funding

Python编程基础:第十二节 嵌套循环Nested Loops_python-nested-loops-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏3次。nested loops = The "inner loop" will finish all of it's iterations before finishing one iteration of the "outer loop"_python-nested-loops

torch_scatter安装踩坑实录及解决方法(ubuntu/conda/python/torch/cuda/torch_cluster)-程序员宅基地

文章浏览阅读1.4w次,点赞41次,收藏77次。torch_cluster,torch_scatter,torch_sparse在成功安装torch后,使用指令pip install --no-index torch-cluster -f https://pytorch-geometric.com/whl/torch-1.x.0+cu10x.html(torch_cluster可直接修改为另外两样)进行安装即可。安装torch及其相关库不成功时,建议全部使用pip安装,如果正在使用anaconda,则在conda虚拟环境内使用pip安装。_torch_scatter