2022年美国大学生数学建模竞赛
D题数据瘫痪? 使用我们的分析!
原题再现:
背景
很多公司将数据视为战略资产,但却很难从中获益。妥善管理这一资源(数据)可以带来竞争优势。因此,公司需要建立一一个集成的数据和分析(D&A) 系统,以保证他们拥有合适的人员、技术和流程来管理、操纵、使用和保护这些资源。
您的咨询团队将开发评估D&A 系统的模型,以帮助公司管理层就三个关键组成部分做出正确的决策:人员、技术和流程。您的模型帮助公司通过检查上述三个关键组成部分来衡量其D&A系统成熟度,为了最大限度地发挥其数据资产的潜力,公司需要高技能人才、相关技术、成熟的流程以及所有三个组成部分之间的紧密联系。您的模型可帮助公司评估其D&A系统的当前状态,并深入了解最大化其D&A系统潜力所需的举措。公司使用您的模型来优化他们的分析能力,获得竞争优势,并保证客户对公司数据管理能力的信任。
洲际货运(ICM) 公司经营着一个大型海港,并聘请了您的团队。ICM公司希望您衡量他们当前D&A系统的成熟度,并提供一个可靠的计划来优化他们的D&A能力。使用您的模型,ICM Corporation希望保证客户灌输对其数据操作的信任和信心。
需求
由于公司规定,ICM Corporation将不能与您的团队分享有关其人员、技术、流程或数据的详细信息。但是,ICM Corporation运营及其定期处理的数据类型的一-般描述包含在 下面的第3页。您需要:开发一个模型来评估ICM Corporation的D&A系统。您的模 型开发和报告应包括以下内容:
衡量ICM 公司当前D&A系统成熟度水平的度量指标,包括衡量D&A人员、技术和流程成功与否的关键绩效指标。
在ICM Corporation使用您的模型确定他们当前的D&A成熟度级别之后,根据您的模型给出对其D&A系统推孝的更改举措,使公司能够最大限度地发挥其数据资产的潜力。
建议ICM应制定的协议,以衡量其D&A 系统的有效性。
演示如何将您的模型应用于更大或更小的港口(ICM Corporat ion拥有大小不同的港口)。分析您的系统成熟度指标如何适应其他行业。具体来说,货运公司可以使用您的成熟度指标吗?如果ICM Corporation的客户(如货运公司)也使用您的度量标准,这对ICM Corporation有何好处?
最后,ICM公司关心客户的满意度和信心,您需要给ICM Corporation的客户(港口的使用者)写一封一页纸篇幅的信函,概述您提出的度量方法,保证其对ICM Corporation 使用的D&A系统的信心。
整体求解过程概述(摘要)
随着技术的发展和数据的爆发式增长,数据正在成为当今社会重要的战略资产,建立一个合适的系统来管理和分析数据变得越来越重要。在本文中,我们建立了一个模型来分析影响数据分析系统成熟度的因素,揭示如何更好地利用数据,并模拟计划以最大限度地发挥数据资产的潜力。
任务1:首先,基于扎根理论,综合考虑ICM公司需求以及标题中给出的成熟度模型文献因素,筛选出影响数据分析的指标,建立数据分析系统能力成熟度评估模型(DAMM)。然后,我们使用层次分析法结合熵权重法(AHP-EWM)对相关指标的权重值进行组合加权分析。最后,我们引入隶属函数的概念,将系统成熟度划分为五个等级,计算出系统成熟度指数得分为0.8173分(最高分为1分),处于相对成熟的第四级(最高为第五级)。
在任务2中:首先,我们使用线性规划模型进行定量分析,在优化成本有限的情况下,我们将问题转化为最大化系统成熟度指数。然后,利用系统动力学对不同成熟度水平对应的指标值进行定性分析,通过对比模拟结果与任务1评估模型的差异,验证模型的有效性。最后,我们综合了这两种方法,并基于第四级和第五级成熟度之间的差异,我们提出了ICM公司需要在团队合作和技术管理方面进行投资的建议。
在任务3:为了制定衡量系统有效性的协议,我们从人、技术和流程的角度划分了不同的指标水平,利用Apriori分析了三组指标之间的规则关联,结合系统动力学模拟的方式,我们给出了ICM数据分析系统在人与人之间的连接机制中的相关协议, 技术、工艺三者合二为一。
在任务4中:首先,我们基于不同规模的海港公司数据分析系统的差异对模型进行评估,并根据任务2中提出的模型进行多组模拟。然后,比较了模拟成熟度指数与DAMM模型得到的结果误差,误差均小于5%,表明该模型对不同规模的海港公司具有良好的适用性。最后,结合“质量管理体系要求”国际标准计划(ISO9001),我们分析了DAMM普遍性的原因,并为客户提供了采用DAMM进行ICM的三个好处。
模型假设:
假设1:假设ICM的数据分析系统在人员、技术和流程方面是全面的。
理由:虽然标题中给出的一般描述不一定是ICM数据分析系统所涉及的所有指标,但为了使指标分析清晰可控,我们假设后面发现的其他影响数据分析的指标不被系统考虑,属于成熟度需要改进的部分。
假设2:假设我们查过的文献比较全面、科学。
理由:为了使DAMM模型科学合理,假设我们查的文献是全面和科学的,这意味着我们的分析与客观认知和事实一致。
假设3:假设ICM客户仅限于集体公司,忽略少数个体经营者。
理由:在实际工作中,洲际货运公司也可能与少数个体经营者进行贸易,但由于个人人员、技术和流程的原因,绝大多数客户的价值和意义不大。
假设4:假设ICM可以用来改进的估计成本数据分析系统是已知的。
理由:这样做是为了分析如何充分利用数据资产。
问题重述:
考虑到问题陈述中确定的背景信息和限制条件,我们需要解决以下问题:
提供衡量洲际货运(ICM)D&A系统(包括人才,技术和流程)成熟度的指标。
为洲际货运公司(ICM)建立一个模型来评估其自身D&A系统的成熟度,并提供ICM需要对系统做出的修改方法,以充分发挥数据的潜力。
给出ICM需要制定的协议,以衡量D&A系统的有效性。
将模型应用于其他规模和不同行业的港口,分析模型的适应性,指出模型指标的优越性,并分析ICM客户使用评估模型对ICM公司可能带来的好处。
写一封信给ICM Collaborative 用户,描述我们的方法和在 ICM Collaborative D&A 系统中不断增加的忠诚度。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:(代码和文档not free)
import numpy as np
from itertools import combinations
minsup = 3/14
f = open("事务数据.txt",'r',encoding='utf-8')
text = f.read()
textlines = text.splitlines()
c1 = []
c2 = []
for line in textlines:
for word in line.split(' '):
if word not in c1:
c1.append(word)
c2.extend(list(map(lambda x:{x},c1)))
def throw_away(set1,set2): #在set2中剔除子集包含set1中元素的元素
for subset1 in set1:
for subset2 in set2:
if subset1.issubset(subset2):
set2.remove(subset2)
def cal_sup(can): #计算支持度
sup_n = 0
for line in textlines:
num = 0
for sub_can in can:
if sub_can in line:
num +=1
if num == len(can):
sup_n += 1
return sup_n/len(textlines)
def union_tuple(tuple): #将元组中包含的所有集合合成并集
result = {''}
for sub in tuple:
result.update(sub)
result.discard('')
return result
def combine(can_set): #对can_set候选集中的所有事务两两排列组合
new_set = []
com_list = []
com_list.extend(list(combinations(can_set, 2)))
for s in com_list:
s = union_tuple(s)
if len(s) == k+2: #防止出现大于k的频繁模式
new_set.append(s)
return new_set
k = 0
mode = []
mode.append(c2)
while(1):
infre_set = [] #定义非频繁模式空列表
for cell in mode[k]: #遍历候选k模式中的每一条事务
support = cal_sup(cell) #计算事务支持度
if support < minsup: #如果支持度小于最小支持度,则将其添加至非频繁模式,同时在原来的候选模式中删掉
# infre_set.extend(list(map(lambda x:{x},cell))) #添加
infre_set.append(cell)
for cell in infre_set:
mode[k].remove(cell) #删掉
tempnew = []
tempnew.extend(combine(mode[k])) #将频繁模式重新组合,生成候选k+1模式
throw_away(infre_set, tempnew) #剔除包含非频繁模式的候选k+1模式
if (len(tempnew) == 0): #如果候选k+1模式为空集
print('k=',k+1)
print('频繁模式为:',mode[k]) #打印频繁模式
break #跳出循环
else: #否则
mode.append(tempnew) #将候选k+1模式添加进模式列表中
k = k + 1 #k+1进入下一次循环