2012年认证杯SPSSPRO杯数学建模
C题 碎片化趋势下的奥运会商业模式
原题再现:
从 1984 年的美国洛杉矶奥运会开始,奥运会就不在成为一个"非卖品",它在向观众诠释更高更快更强的体育精神的同时,也在攫取着巨大的商业价值,它与电视结盟,在运动员入场仪式、颁奖仪式、热门赛事、金牌榜发布等受关注的时刻发布赞助商广告,它在每个行业中仅挑选一家奥运全球合作伙伴,这就是"Top 赞助商"的前身。
这个模式经过 28 年的发展之后,现在已经是商业社会里最重要的公司的展示舞台。品牌选择奥运会的理由,是因为这里凝聚了观众的大量时间。他们希望在观众关注比赛的同时也注意到自己的品牌和产品,而 Top 赞助商们,则可以获得在电视奥运频道里排除行业里其他竞争对手广告的特权。
每届奥运会,Top 赞助商的赞助费用都以 10% 至 20% 的速度在增长。2008 年,北京奥运会全球合作伙伴最低赞助为 6000 万美元,2012 年伦敦奥运会就变成 8000 万美元。这种模式被奥运会主办方发挥到了极致,宣传费用的门槛把绝大多数企业排除在了奥运会之外。但是越来越多的企业不甘心错过奥运会这个吸引大众眼球的宣传机会,他们在寻找新的新闻传播渠道。
现在是一个机会,电视正在受到冲击,法国科技公司源讯(Atos Origin)2011 年 10 月便公布了一份《奥运会十大科技事实》清单,其中提到 2012 年伦敦奥运会期间,将有 85 亿台平板、智能手机等移动设备联网。他们可以自己决定看什么,定制内容,并可以通过社交网络和志同道合者相互吐槽。一切都在数字化,数字化不仅仅打碎了时间,它让传播渠道、受众的注意力、品牌营销方式甚至一切都碎片化了,观众不在只关注电视,他们利用社交网络可以获得更加丰富的比赛信息和网友的评论。这也为更多的企业提供了在奥运期间宣传自己的机会。有一个例子:2012 年 1 月 26 日,一个名为 Jamie Beck 的 Tumblr 博主发布了一张"海怪号(Mar Mostro)"帆船在沃尔沃环球帆船赛上乘风破浪的照片,随后他收到了 2.5 万条互动信息,其中 60% 是转发这张照片。Jamie Beck 是这艘船的赞助商 Puma 聘请的推广作者,Puma 预计,鉴于 Beck 有 200 万粉丝,这张照片最终可能获得 600 万至 700 万品牌印象度(Impressions,衡量到达率的指标之一),而 Instagram 上会达到 4000 万。在整个沃尔沃帆船赛中,Puma 一共派了 10 位这样的作者去比赛地点阿布扎比,他们在 Twitter,Instagram 和Tumblr 上更有针对性地发布与 Puma,"海怪号"相关的内容。尽管 Puma 还没有发布它们的奥运广告计划,但 Puma 数字营销负责人 Remi Carlioz 有类似的计划:"我们不是奥运的官方合作伙伴,但我们会想别的办法和我们的受众一起参与到这个话题里来。"
一家企业想利用社交网络在奥运会期间进行企业宣传,假设现在距离奥运会开幕还有 100 天,一个社交网络的专业推广者平均每天可以新增 500 个粉丝,这些粉丝会把推广者发布的和奥运会相关的所有信息都分享给自己的粉丝们,普通网络用户平均每天可以新增 20 个粉丝。
1 第一阶段问题
问题一: 请建立数学模型,预测奥运会开始后,一条含有企业广告的奥运会新闻可以被多少人观看到?
问题二: 假设企业产品的潜在用户大约有 2 亿人,他们都在使用社交网络,企业希望广告宣传覆盖其中 40% 的人群,至少需要雇佣几名专业社交网络推广者才能实现?假设专业推广者每天的工资是 500 元。还可以从网络上雇佣兼职宣传者,每天仅需要付 50 元的工资,但是他们平均每天新增的粉丝数仅为 35 人,考虑到成本,请给企业制定一份合理的用人方案。附件中的数据是 Twitter 社交网站用户之间的链接关系(follow 关系)数据,用于发现用户组,以及分析 Twitter 用户的链接分布。
整体求解过程概述(摘要)
本文以碎片化趋势下的奥运会商业模式为背景,研究了 SNS 社交网络中的消息传 播模式,用户对消息的反应行为,分析了消息传播过程与机制, 。结合本文结合传播理论、网络拓扑结构将消息传播问题抽绎成社交网络中的信息流动模型,对网络节点及其间的消息传播过程进行了划分,并在此基础上基于微分方程模型、图论、传染病动力学构造了一个社交网络消息传播模型。基于总体功能与架构,将整个模型划分为二次传播模型,消息蔓延模型,规划模型三个子模型。
通过构建二次传播中消息转发比率演化模型,考虑了传播过程中的边际转发率递减规律,结合微分方程、传染病动力学等,研究了消息未知用户,传播用户,仅接收用户分布密度增长加速度。通过节点度的引入,用 SPSS 分析处理出网络结构特征数据,带入模型中结合 C++编程得到中间数据,再导入 MATLAB 中分析,拟合出了传播节点、未知节点、只读节点,三类节点分布密度随时间的变化趋势图。
消息蔓延模型以二次传播模型为基础,从传播过程和时间两个维度对模型进行分解,得出基于不同基数的求解公式。并通过 C++分层模块化实现,拟出基于粉丝基数、粉丝增加数,参数化的实现过程,并进行迭代求总的蔓延效应。通过对不同粉丝基数和粉丝增加数的对比分析,发现粉丝基数对于消息蔓延效应的影响大于粉丝增加数。本部分还通过 SPSS,excel 数据分析,统计计算出其粉丝重复度,带入模型消除重复情况对结果的影响。
基于上述两个子模型,提出了规划模型,带入数据用 MATLAB 求解出最优方案。 此外文章还提出了利用幂律分布、BA 模型,均匀分布等对模型进行改进的方案,以及随时间变化的消息蔓延模型的思路。最后文章基于分析结果,对如何利用社交网络平台进行宣传和营销提出了建议。
问题分析:
携带广告的奥运新闻在社交网络中的传播模型可以抽象为,信息在社交网络中节点 (专业推广者,普通网络用户)间的流动过程。社交网络中的节点分为专业推广者节点 和普通网民节点。消息的传播方式也有两类。
①一次传播。以专业推广者为中心,由专业推广者发布或者转发奥运新闻。从而将广告信息直接推向其粉丝(普通网民) 。这种奥运新闻及广告由专业推广者直接到普通网民的流动过程,叫做消息的一次传播过程。专业推广者 普通网络用户。
②二次传播。普通网民通过转发该条新闻,从而将广告信息推给其粉丝,即由专业推广者引起的,经普通网民转发的普通网民对消息的接收,叫做二次传播过程。专业推广者普通网络用户 普通网络用户。
专业推广者的首次发布信息过程,其接收者为所有粉丝(粉丝基数+新增粉丝) ,转发者考虑范围也为所有粉丝,而在之后的重复转发过程中,其接受者仍为所有粉丝,但转发者考虑范围仅为新增粉丝(基于假设 4) 。
社交网络中节点群演化模式
在社交网络中, 一个人发布的消息会被其粉丝看到, 并以一定的概率转发、 传播. 同时,若其粉丝对其内容不感兴趣则只阅读新闻并不转发消息,此条信息流到此终止。本文把 SNS 网络上的所有相关用户抽象为节点, 用户之间的收听关系则可以抽象地用节点之间的边来表示,消息沿着边传播。根据用户节点是否阅读到携带广告的奥运新闻,以及是否转发该条新闻,将社交网络中的所有用户节点分为三类。
①未知节点,该节点还没有接收过某条信息,并有可能接收消息。
②只读节点,该节点已经接收了来自于其邻接节点转发的消息,但是不准备转发消息。
③转发节点,该节点接受了来自其收听节点的消息,并通过转发将此消息传播给他的邻接节点;
这三类节点分别对应三类用户群。
1 未知用户节点群。该集合中的元素为没有阅读到带广告的奥运新闻的用户。
2 只读用户节点群。该集合中的所有用户均阅读过新闻,但不转发新闻。 ③ 转发用户节点群。该群中所有用户均阅读过并且转发了携带广告的新闻。
初始时,企业刚刚在奥运新闻中植入广告,SNS(社交关系网络)中所有用户均属于未知用户群。企业通过专业推广员在线发布新闻,使其进入 SNS 平台。新闻以专业推广员动态更新的方式传送到其粉丝(即一次传播过程) 。专业推广员的粉丝在收听感知新闻后,状态激活。若该粉丝不转发此新闻则其由原来的未知状态转为只读状态,进入只读用户群。若该粉丝转发此新闻,将新闻推送给他自己的粉丝(二次传播过程)后,其状态变为转发态,其角色也转化为转发用户进入转发用户群。
模型选择与解题思路
在前述社交网络信息传播模式和节点群演化模式的基础上,考虑到节点间的相互转化关系,信息的流动过程类似于传染性疾病的传染模型(SIR 模型) 。以转发为方式的消息传播类似于以感染为方式的传染病传播模型。未知用户群可以看做未感染人群,具有感染疾病(接收到消息)和传播疾病(转发消息)的可能。只读用户群类似于免疫人群,他们感染过疾病(接受到过消息)但具有免疫力不会在传播疾病(转发消息) 。转发用户群类似于传染人群,他们通过转发将消息传播给临近节点。
在 SIR 模型的基础上考虑到节点度(用户链接关系数)和传播机理(边际转发效率递减) ,结合网络拓扑结构和传染病动力学,构建出了消息传播的动力学方程组。在此方程组的基础上通过 matlab、C++编程等模拟出未知节点、只读节点和转发节点关于时间 t 的密度函数 W(t)、G(t)、C(t),即二次传播过程中消息转发比率演化模型,简称二次模型。
基于此二次模型,以一次传播过程的基数为依据,将一次传播分为原有粉丝引发的二次传播和新增粉丝引发的二次传播,并对他们分别代入消息蔓延效应预测模型中求出消息收听者的蔓延情况。由于消息转发密度 C(t)和只读密度 G(t)演化情况不同,消息蔓延效应模型又分为消息转发者预测模型和消息接受者预测模型。到此已求出以推广能力和原有粉丝数为基数的消息蔓延模型。
接着将专业推广者和兼职宣传者的推广能力和粉丝基数代入模型中求解出单个推广人员或者兼职宣传者分别引起的消息蔓延规模。最后再以单个消息蔓延规模为基础,结合粉丝重复率,成本约束条件等构建线性规划模型求解最优组合。此过程称作消息覆盖规划模型。
模型假设:
1. 由转发引起的时间延迟可忽略,用户接收到携带广告的奥运新闻后可以及时将此消息转发,且他的粉丝可以及时收到该条新闻并看到其中的广告;
2. 假设粉丝消息接收方式仅为通过状态更新看到奥运新闻广告,即不考虑进入收听者主页,通过查看其历史状态记录等方式。
3. 普通网络用户转发消息当天,新增粉丝行为发生在转发消息之前,即当天新增粉丝都可收到其动态(转发消息) 。
4. 假设所有网络普通用户的转发行为都发生在第一次看到该条新闻之后,此后看到同一条新闻,用户将不再转发此新闻。因此,消息转发的时间都为首次看到新闻的时间。专业推广者和兼职宣传者因任务要求,需要每天都发布或者转发该条新闻。
5. 假设专业推广者的粉丝均为普通网络用户。
6. 假设企业具有选择偏好,都偏向于雇佣具有较多粉丝的专业推广者。专业推广者分布于粉丝较多的网络用户群中。 兼职宣传者粉丝基数和普通网络用户一样;专业推广者,兼职宣传者,普通网络用户的差异表现在原有粉丝基数和粉丝增长速度。
论文缩略图:
全部论文请见下方" 只会建模 QQ名片" 点击QQ名片即可
部分程序代码:(代码和文档not free)
bash
using namespace std;
const int M=334;//常量 m;
const double P1=0.6;//常量 P1
const int line=1000;//数组行数
double Lmt; //L(m,t)的输出结果
double num;//推广能力
double Pwmt(double t)
{
return pow(1P1*t*Lmt,M);
}
double Wt(double t)//Δw
{ return 1
M*P1*P
wmt(t)*L
mt;
}
double Ct(double t)//
Δc
{ return P1*Wt(t);
}
double Gt(double t)//Δg
{ return (1P1)*Wt(t);
}
double St(double t)//Δs
{
double tem
=num*pow(
M+20,t); for(int m=1;m<=t;m++)
tem*=
Ct(m); return tem;
}
double Tt(double t)//Δt
{
double tem1=0;
double tem2=po
w(M+20,t1); for(int m=100;m>=t;m)
tem1+=St(m); for(int n=1;n<=t1;n++)
tem2*=
Ct(n); return tem1/tem2;
}
double T()//T
{
double tem; for(int m=1;m
<=100;
m
+
+)
tem
+=Tt(
m); return tem;
}
double St_g(double t)//Δs_g
{
double tem
=num*pow(
M+20,t); for(int m=1;m<=t;m++)
tem*=
Gt(m); return tem; }
double Tt_g(double t)//Δt_g
{
double tem1=0;
double tem2=pow(M+20,t1);
for(int m=100;m>=t;m)
tem1+=St(m);
for(int n=1;n<=t1;n++)
tem2*=Gt(n);
return tem1/tem2;
}
double G()//T
{
double tem;
for(int m=1;m<=100;m++)
tem+=Tt_g(m);
return tem;
}
int main()
{
ifstream in("matrix.txt");//由文件存储数组数据
double Mp[line][2]={0};//定义数组
double temp=0;//临时变量
// double Lmt=0;//L(m,t)的输出结果
int i=0;
int j=0;
for(i=0,j=0;!in.eof()&&i<line;i++)
{
in>>Mp[i][j]>>Mp[i][j+1];
// cout<<Mp[i][j]<<" "<<Mp[i][j+1]<<endl;
}
in.close();
ifstream inf("Pcmt.txt");
double Pcmt[line]={0};//PC(m',t')函数输出为 Pcmt[i]
for(i=0;!inf.eof()&&i<line;i++)
{
inf>>Pcmt[i];
//cout<<Pcmt[i]<<endl;
}
inf.close();
for(i=0;i<line;i++)
temp+=Mp[i][0];
double M_ave=temp/line;
for(i=0,j=0,temp=0;i<line;i++)
{
temp+=Mp[i][j]*Mp[i][j+1]*Pcmt[i];//
}
Lmt=temp/M_ave;
// cout<<"函数 L(m,t)输出结果为"<<Lmt<<endl;
double t;//时间 t
do{
cout<<"请输入时间 t(1<=t<=100) ";
cin>>t;
//Pwmt(t);
}while(t<1||t>100);
double num;//推广能力 35 or 500
do{
cout<<"请输入推广能力 num(35 或者 500) ";
cin>>num;
//Pwmt(t);
}while(num!=35&&num!=500);
double result=0;
result=G()+T();
cout<<"接收者人数为"<<result<<endl;
system("PAUSE");
return 0;
}