版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要随着移动设备的普及和移动互联网的高速发展,O2O(OnlineToOffline)营销模式最吸引眼球,同时也引起了不少学者和业界的关注。现今已有很多论文分析了使用移动优惠券的影响因素。本文是对优惠券的研究,本研究是基于机器学习从多个特征角度探究移动优惠券使用行为的影响因素,对O2O优惠券实现快速且精确预测用户是否会在规定的时间内领取并使用优惠券进行研究分析。分析电商平台的用户历史数据,包括优惠券的领券时间、优惠券的优惠情况、用户与商家线下的最近距离和用户的消费时间,对这些数据做可视化分析,构建特征集。从多个特征角度完成数据的处理,生成测试模型,将模型引入到移动优惠券是否使用的研究当中。本论文对基于机器学习的O2O优惠券使用率的设计与实现进行了一系列的分析,包括系统设计分析。总体设计分析,对需求功能进行一系列的规划。详细细节的设计分析,进行模型预测。研究结果表明模型预测的准确性有了提升,优惠券特征明显影响着优惠券是否会被使用。关键字:O2O优惠券决策树随机森林XGBoost模型
AbstractWiththepopularizationofmobiledevicesandtherapiddevelopmentofmobileInternet,theO2O(OnlineToOffline)marketingmodelattractsthemostattention,andalsoattractstheattentionofmanyscholarsandtheindustry.Manypapershaveanalyzedthefactorsthatinfluencetheuseofmobilecoupons.Thispaperisaresearchoncoupons.Basedonmachinelearning,thisstudyexplorestheinfluencingfactorsofmobilecouponusingbehaviorfromavarietyofcharacteristics,andconductsresearchandanalysisonthefastandaccuratepredictionofwhetheruserswillreceiveandusecouponswithinaspecifiedperiodoftimebasedonO2Ocoupons.Analyzetheuserhistorydataoftheelectroniccommodityplatform,includingcoupontime,coupondiscount,thenearestdistancebetweentheuserandthemerchantandtheuser'sconsumptiontime,andconductvisualanalysisonthesedatatobuildfeatureset.Thedataisprocessedfrommultiplefeatureangles,andatestmodelisgenerated.Themodelisintroducedintotheresearchonwhethermobilecouponsareused.ThispapermakesaseriesofanalysisonthedesignandimplementationofO2Ocouponutilizationbasedonmachinelearning,includingtheoverallsystemdesign.Overalldesignanalysis,requirementsforaseriesoffunctionalplanning.Detaileddesignanalysis,modelprediction.Theresultsshowthattheaccuracyofthemodelpredictionhasbeenimproved,andthecharacteristicsofcouponssignificantlyaffectwhetherthecouponswillbeused.Keywords:O2OcoupondecisiontreerandomforestXGBoostmodel
目录摘要 IAbstract II绪论 11 系统分析 31.1可行性分析 31.1.1技术可行性 31.1.2经济可行性 31.1.3操作可行性 31.2功能分析 32 关键技术与方法 42.1机器学习基础 42.2机器学习算法 42.2.1支持向量机(SVM) 42.2.2决策树 52.2.3随机森林 52.2.4XGBoost 52.2.5Stacking融合 62.2.6GidSearchCV 62.3sklearn库 63 数据分析 83.1数据的来源 83.2数据描述 83.3数据导入 83.4数据清洗与整理 93.5数据可视化 103.5.1用户分析 103.5.2优惠券使用的总体情况 113.5.3每月消费统计 113.5.4优惠券的领取数量和使用 123.6特征工程 133.7特征提取 153.7.1打折率 153.7.2距离 163.7.3领劵日期 163.8标签 174 模型构建与评估 184.1建立训练数据集和测试数据集 184.2构建模型 184.3模型训练 184.4验证 194.5测试 19研究或成果与社会、环境、文化、经济、环保等关系 20总结 21致谢 22参考文献 23
绪论研究背景与意义随着可支配收入的增长和物流基础设施条件的改善,我国网络购物普及率有了进一步提升,网络零售业现已成为互联网新经济强大的增长引擎。网络购物行业发展日益成熟,电子商务企业之间的市场竞争也非常激烈。各家电商企业为了在激烈的市场竞争中站稳脚跟,除了继续不断扩充品类、优化物流及售后服务外,还纷纷使尽浑身解数展开销售大战,各种网络营销手段不足为奇。网络营销主要指的是用计算机网络平台向虚拟市场传递各种商品的相关信息,然后引发消费者的需求,唤起消费者想要购买商品的欲望,最终形成购买行为的各种销售活动。电子优惠券也是网络营销中的一种常见的促销方式。电子优惠券是电子形式的优惠券,是利用各种电子媒体制作、传播和赎回的促销凭证。它能够有效地传播产品、服务和价格方面的信息,也可以吸引网民的注意力,还能诱导一部分群体的需求,使其最终产生购买行为。由此电商企业就可以减少使用昂贵的广告传播媒体,从而降低营销成本,同时提高营销效率,进而能够更好地满足消费者多样化的需求。国内外研究现状随着科技的发展,越来越多的商家开始利用网络和电子设备来提高优惠券的质量以提高它所带来的效益。优惠券不仅可以降低消费者的消费压力,还能勾起了消费者的购买欲望并为商家提高极大的销量,同时也会增加消费者的忠实度。但是在优惠券的使用中也要注意到一些问题,优惠券的发行量是否能在能力范围之内,优惠券的展示方式是否能够吸引消费者的眼球。从算法角度上来看,个性化优惠券的种类与个性化推荐系统非常相像,同样是分析用户的潜在需求,但优惠券其实又是商品推荐的进一步发展,正确的推荐了商品,再加上一定的折扣,更能燃起消费者的购买欲望。就国外而言,商家投资于数字优惠券比横幅广告更有利可图,就传统零售业向新零售进行转型,重点发展O2O业务,提出了O2O平台下,商家与用户之间信息不对称的问题。从关系角度对O2O商业环境下消费者行为进行了初步的研究,提出了如何提高消费者的回购意愿和分享意愿。利用朴素贝叶斯、k近邻、Logistic回归、神经网络、决策树和随机森林方法对O2O优惠券使用情况进行预测,通过ROC曲线得出,随机森林模型预测准确率更高。研究内容与方法本课题再pycharm环境中使用Python语言在Windows平台下根据客户优惠券使用的历史行为数据建立预测模型。首先对原始数据进行数据预处理,主要是把字段的格式整理到符合模型的要求;然后对已经完成预处理的数据建立特征,每个特征根据影响用户使用优惠券的因素而建立;再根据上述的特征利用sklearn库建立预测模型,最后测试建立预测模型的性能。在编写论文之前学习了机器学算法、sklearn库、决策树、随机森等。对基于机器学习的O2O优惠券和优惠券使用行为的影响因素有了一定的了解。然后根据自己所学习的内容进行程序编码,做部分测试,最后再做整体测试,整个程序的设置大致就是这样。论文结构本文共分为五章:第一章:论文的绪论部分。主要介绍了论文的研究背景与意义、研究现状和研究方法。第二章:系统分析,主要从技术、经济、操作、功能四个方面做可行性分析。第三章:介绍了本研究采用的关键技术和方法,介绍了机器学习算法以及本研究需要用到的关键库。第四章:对数据进行分析和处理。解释数据的来源,导入数据,对数据进行清洗整理,然后对整理好的数据做可视化。分析特征工程,提取相应的特征。第五章:模型构建与评估。
系统分析1.1可行性分析本研究主要采用pycharm使用Python语言进行编写。对基于机器学习的O2O移动优惠券的使用进行预测,下面是通过三个方面对可行性进行分析。1.1.1技术可行性基于机器学习的电商平台个性化投放软件使用Python,学习和使用起来都很便利。因为Python语言学习和使用都很简单,更容易上手,拥有强大的库,也是当下最流行的语言所以本研究采用Python语言实现。因此可以进行此开发。1.1.2经济可行性本研究需要一台电脑,电脑配置为Windows7、Windows10都可以。软件使用Python是免费的,在开发上消费不高,而且系统功能简洁需求清晰,开发时间也并不长,所以此系统基本花费较少具有经济可行性。1.1.3操作可行性基于机器学习的电商平台个性化投放的研究操作简单、容易实现,只需要对Python语言有一定的了解,对机器学习有一定基础就可以对本研究进行实现。所以本系统可以进行开发。1.2功能分析本研究主要是根据已有的消费数据,选取关键性数据,比如:用户ID、商户ID、优惠券ID、优惠率、领券时间、消费时间以及用户距离商家的最近门店的距离,来实现优惠券的个性化投放。
关键技术与方法2.1机器学习基础机器学习的主要任务就是将实例中的数据划分到合适的分类中,它还有一个任务是回归。回归主要用于预测数值型的数据。分类和回归都属于监督学习,因为这类算法必须知道预测目标变量的分类信息,所以称它为监督学习。机器学习可以帮我们从很多数据中心抽取有用的信息。机器学习的六个步骤分别是:收集数据、准备输入数据、分析输入数据、训练算法、测试算法、使用算法。之所以选择Python作为机器学习算法的编程语言是因为Python语言语法清晰、容易操作文本文件、使用的范围广,拥有大量的开发文档。学习机器学算法,必须了解数据实例,每个数据实例都是由多个特征值组成的。2.2机器学习算法2.2.1支持向量机(SVM)支持向量机(SupportVectorMachine,SVM)是一种的分类器,它之所以被称为“机”是因为它会产生一个二值决策结果。二值决策结果就是一种决策“机”,然后通过SVM分类器可以得到低错误率的结果。支持向量机是通过求解一个二次优化问题来最大化分类间隔。在SVM实现中会使用核函数,它的作用是直接计算出两者添加多项式特征之后的点乘,加快计算速度。核函数的定义域就是样本的属性空间,值域就是一个实数数轴。核函数是定义一种距离,定义属性空间中,两个样本之间的距离,大于某个距离为正,小于某个距离为反。核函数的作用就是强行拉出距离来。SVM应用的一般框架:收集数据:可以使用任何数据;准备数据:需要数值型数据;分析数据:有助于做可视化分隔超平面;训练算法:实现两个参数的调优;测试算法:通过计算实现;使用算法:大多数的分类问题都可以使用SVM,只需要对代码做一些修改。2.2.2决策树决策树(decisiontree):是一个树结构,是一种基本的分类与回归方法。它的每个非叶节点代表着一个特征属性上的测试,每个分支表示这个特征属性在某个值域上的输出,每个叶节点都存放到一个类别里面。在用决策树进行决策的时候它是从根节点开始的,测试还没分类项中的相应的特征属性,然后在根据它的值选择输出分支,直到到达叶子节点,最后将叶子节点存放的类别作为决策结果。在构造决策树时要先找出数据集中哪个特征在划分数据分类起决定性的作用。为了找到这个特征,划分出最好的结果,首先要对每个特征进行评估。完成测试后,原始数据就被划分成为了几个数据子集,在这些子集中会分布在第一个决策点的所有分支上。如果分支上的数据属于同一种类型,就不再需要对数据进行下一步分隔;如果分支上的数据不属于同一种类型,则需要再次划分数据子集的过程,这个划分过程与之前原始数据集划分的方法相同,最后直到所有数据子集内的类型都相同。2.2.3随机森林随机森林(randomforest)是集成学习用来解决分类和回归的问题,它不仅可以用来处理决策树训练过程中引入的特征,还能可以用来估计建立模型数据变量的重要性。随机森林采用的是自助法重采样技术方法,在原始训练集中有放回地重复随机抽取样本生成新的训练样本集合。然后再用自助样本集生成的分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。随机森林包含了很多决策树,在随机森林中,对决策树的每个节点的属性集合中随机抽取包含属性的子属性集,再选择属性最好的进行划分。随机森林用于分类是采用多个决策树分类,再将分类结果用投票方式得到最终分类,提高准确率。随机森林容易理解方便实现,在很多数集上比其它算法更有优势;能够处理高纬度的数据并且做特征选择。在训练完成之后可以给出哪些高纬度比较重要,随机森林训练速度快,在训练过程中可以监测到高纬度数据之间的相互影响,也更容易做成并行化方法。随机森林用sklearn的相关算法实现。2.2.4XGBoostXGBoost是一个优化的分布式梯度增强库。它的实现灵活便携高效。XGBoost是对梯度提升算法的进一步改进,同时也提供了并行树提升。它可以快速准确的解决很多的数据科学问题。XGBoost是一个树集成模型,它使用的是树的总数K的每棵树对样本的预测值的和作为该样本在XGBoost中的预测,XGBoost对代价函数做了二阶展开,加入了一阶导数和二阶导数。XGBoost能够支持自定义的损失函数,只需要满足二阶连续可导的函数这个条件都可以作为损失函数。XGBoost在损失函数中使用了正则化项,可以用来控制模型的复杂度。XGBoost在训练之前,先对数据进行了排序,然后保存为(block)结构,再迭代中重复使用这个结构,减小计算量。为了提高优惠券分类问题的准确率,本研究采用了XGBoost的三分类算法(TWD⁃XGBoost)。这个算法主要有两步:(1)用XGBoost算法预测用户领取优惠券之后会不会使用的概率;(2)根据得到的预测使用概率,结合三支决策思想再建立三分类模型,最后实现优惠券的使用预测。2.2.5Stacking融合Stacking是把已经训练好的所有基模型对整个训练集进行预测。把第j个基模型对第i个训练样本的预测值作为新的训练集中第i个样本的第j个特征值,之后再对新的训练集进行训练。运用的方式对预测的过程也要先运用所有基模型的预测形成新的测试集,最后再对测试集进行预测。2.2.6GidSearchCVGridSearchCV由两个部分组成分别是GridSearch和CV,即网格搜索和交叉验证。网格搜索是搜索参数,在规定的参数范围内,按步长依次调整参数,在用调整之后的参数训练学习器,在全部的参数中找到在验证集上精度最高的参数,这相当于一个训练和比较的过程。GridSearchCV是用当前对模型影响最大的参数调优,一直调到到最优化,然后再拿下一个影响最大的参数调优,重复这个操作直到所有的参数调整完毕。使用这个方法虽然可能会出现调到局部最优而不是全局最优的情况,但是它省时间省力。2.3sklearn库现今Python语言已经从最前沿的科学计算语言成为了数据科学、机器学习等领域最重要的语言之一。Python提高了对库的支持,成为了数据分析的一个最常用的选择。Python数据分析主要是使用相关的库,比如数据整理需要用到numpy和pandas库,数据描述与分析主要用到pandas库。Python对数据分析的过程就是对库的学习过程。sklearn又叫scikit-learn,是基于numpy和scipy的Python机器学习库。它是由标准监督和无监督的机器学习方法组成的。一般用于模型选择和评估、数据转换、数据加载和模型持久化的工具,它主要有六个模块分别是:分类:SVM、最近邻、随机森林、逻辑回归等回归:Lasso、邻回归聚类:k-means、谱聚类降维:PCA、特征选择、矩阵分解等模型选择:网格搜索、交叉验证、指标矩阵预处理:特征选取、正态化
数据分析3.1数据的来源本研究的数据采用了O2O优惠券使用预测提供的原始数据。该数据提供了用户在2016年1月1日到2016年6月30日之间真实线上线下消费行为。它的内容是通过这个消费行为预测客户利用2016年7月领取优惠券后15天内的使用情况,判断是否发放优惠券告。本文使用这个数据建立分类模型后,继续预测在15天的规定时间内商铺的优惠券是否会被用户使用。判断对2016年7月的用户数据是否在投放优惠券后发生购买行为的平均AUC的大小。3.2数据描述数据的字段描述如表2-1用户线下消费和优惠券领取行为表。从表中可以知道数据集包含了七个字段分别是:用户ID、商户ID、优惠券ID、优惠率、领券时间、消费时间以及用户距离商家的最近门店的距离。表3-1用户线下消费和优惠券领取行为表字段描述User_id用户IDMerchant_id商户IDCoupon_id优惠券ID,null代表无优惠券消费,当它为null时Discount_rate和Date_received字段无意义Discount_rate优惠率,x\in[0,1]是折扣率,x:y代表满x减yDistance用户经常活动的地点离商户最近门店的距离是x*500米(如果是连锁店,则取最近的一家门店),x\in[0,10];null代表无此信息,0表示低于500米,10表示大于5公里Date_received领取优惠券日期Date消费日期,Date=null&Coupon_id!=null表示领取优惠券但没有使用,为负样本;Date!=null&Coupon_id=null表示普通消费日期;Date!=null&Coupon_id!=null表示用优惠券消费日期,为正样本3.3数据导入在机器模型中数据集是最重要的,首先导入我们所需要的两个数据集。线下测试集:ccf_offline_stage1_test_revised.csv线下训练集:ccf_offline_stage1_train.csv我们将使用第二个数据集训练模型,再对第一个数据进行预测,得出用户在15天内使用优惠券的概率值。在导入测试集和训练集的同时也需要导入需要用到的相关库,比如:numpy库、pands库、matplotlib库、scikit-learn库、scipy库。导入数据包:importpandasaspdimportnumpyasnpimporttimefromdatetimeimportdateimportnumpyasnpimporttimeimportosfromsklearn.model_selectionimportStratifiedKFold,GridSearchCVfromsklearn.pipelineimportPipelinefromsklearn.linear_modelimportSGDClassifierfromsklearn.preprocessingimportStandardScalerfromsklearn.metricsimportauc,roc_curve这些导入成功之后先做一个简单的统计,看一下用户是否使用优惠券购买商品的消费情况,消费情况有如下4种:有优惠券,购买商品:75382有优惠券,未购买商品:977900无优惠券,购买商品:701602无优惠券,未购商品:0通过上面4种情况发现有701602人购买商品没有使用优惠券,有977900人有优惠券然而并没有购买商品,真正使用优惠券购买商品的人只有75382人,所以目的就是要把优惠券发放给那些会购买商品的人。3.4数据清洗与整理数据清洗的主要任务是删除原始数据中的无关数据和重复数据。数据清洗首先要做的是处理数据缺失值,处理缺失值包括:删除缺失值、插补缺失值和不处理缺失值;然后再对重复值进行处理,最后在处理异常值。数据清洗一系列的工作完成后就是对数据进行整理。采用numpy库unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表。一般情况下优惠越多,用户就越可能使用优惠券。删除重复项在进行排序,最后输出最小日期和最大日期。defget_discount_rate_feature_potins(pf):print('Discount_rate类型:\n',pf['Discount_rate'].unique())#convertdiscount_ratepf['discount_type']=pf['Discount_rate'].apply(getDiscountType)pf['discount_rate']=pf['Discount_rate'].apply(convertRate)pf['discount_max']=pf['Discount_rate'].apply(getDiscountMax)pf['discount_jian']=pf['Discount_rate'].apply(getDiscountJian)print(pf['discount_type'].unique())print(pf['discount_rate'].unique())print(pf['discount_max'].unique())print(pf['discount_jian'].unique())returnpf3.5数据可视化在导入数据、清洗数据和整理数据之后就可以进行数据可视化了。可视化过程是为构建模型提供一些想法,也可以帮助识别一些异常值或所需的数据转换。在Python中有很多库都可以做可视化文件,比如matplotlib。matplotlib自身配置了配色方案和默认设置,matplotlib只是一个底层的工具,绘图还是要采用Python中的库,比如pandas和seaborn库。3.5.1用户分析根据2016年1月1日至2016年6月30日用户消费次数设置用户等级:大于10次为一级用户,6-9次为二级用户,2-5次为三级用户,1次为普通用户。从图中可以看出未消费用户数量是已消费数量的约1.5倍。图3-1用户等级图3.5.2优惠券使用的总体情况从图3-2中可以看出很多人(701602)购买商品却没有使用优惠券,也有很多人(977900)有优惠券但却没有使用,真正使用优惠券购买商品的人(75382)很少!所以优惠券的精准投放非常重要。图3-2优惠券使用的总体情况图3.5.3每月消费统计如图3-3所示是每月消费统计图,由图可知3月份-6月份的销售量比1、2月份高很多,因此商户采取的运营策略导致的销量提高会受季节影响。图3-3每月消费统计图3.5.4优惠券的领取数量和使用如图3-1所示,是优惠券领取的数量和使用的对比图。领取优惠券日期和使用优惠券日期是非常重要的字段,对后面训练数据集和验证数据集标签起到了重要的作用。采用matplotlib包数据进行了可视化分析。从可视化结果发现优惠券的发放集中在春节期间的消费的比例并不高,在特定定节假日购物有所增加,字段选择也决定当天的优惠券折扣率是否应该提高。图3-1优惠券领取数量和使用比例图3.6特征工程特征表示从数据中抽取出对结果预测有用的信息,特征工程就是对特征的处理,包括数据的采集、数据预处理和特征选择。特征工程把原始数据转化为特征,可以更好的表示预测模型处理的实际问题,也可以提高对未知数据预测的准确性。本研究采用特征构造的方法对原始数据集的信息构造了:用户特征、商户特征、用户商户特征、优惠券特征和其他特征。用户特征用户特征可以反映出用户的基本信息,比如:用户的购物习惯、用户居住地与商户的距离等信息。用户特征的具体特征如下表3-1所示。表3-1用户特征表特征特征用户消费的商家数用户领取优惠券的数目用户与商户距离的最小值用户领券、用券时间间隔的平均值用户与商户距离的最大值用户领券、用券时间间隔的最小值用户与商户距离的平均值用户领券、用券时间间隔的最大值用户与商户距离的中值用户购买商品使用优惠券的比例用户用优惠券购买物品的数目用户领券、用券时间间隔用户购买商品总数用户使用优惠券数目商户特征商户特征可以反映出商户的综合实力、客户量的多少、受欢迎程度、销售业绩等相关信息。具体特征如下表3-2所示。表3-2商户特征表特征特征商户的历史销售总数商户与用户距离的中值商户使用优惠券销售商品的数目商户历史优惠券的使用率商户历史发放优惠券总数商户卖出商品使用优惠券的比例商户与用户距离的最小值商户与用户距离的最大值商户与用户距离的平均值用户商户特征表3-3用户商户特征表特征特征用户购买商户商品的次数用户在商户使用优惠券购买商品的比例用户领取商户优惠券的次数用户在商户购买商品的概率用户用优惠券购买商户商品的次数用户在商户不使用优惠券购买商品的比例用户普通购买商户商品的总数用户与商户的距离用户在商户使用优惠券的使用率优惠券特征用户领取优惠券是具体哪天,具体特征如表3-4所示。表3-4优惠券特征表特征特征折扣率满减优惠最低消费金额领券时间在周几满减优惠券的减免金额领券时间在哪个月份是否满减优惠券领券时间和截止时间间隔其他特征表3-5其他特征表特征特征当前时间用户领取优惠券的总数当前时段用户领取特定优惠券的数量用户当天领取优惠券的次数用户当天领取特定优惠券的数量用户当前领券与最早一次领券时间间隔用户当前领券与最后一次领券时间间隔根据上面六个方面,最后总汇总了58个特征。原始的数据不会有缺失的情况,但新增特征就会存在缺失情况,会利用平均值进行填补。特征选择的目的就是排除无效和O2O优惠券使用率影响不大的特征。3.7特征提取3.7.1打折率选取特征第一个想到的必然是打折率。在平时生活中都是一样,优惠的越多用户就越有可能使用优惠券。null表示没有打折,[0,1]:折扣率,x:y:满x减y;根据这3种情况我们可以选取4个特征:打折类型(getDiscountType())、折扣率(convertRate())、满多少(getDiscountMan())、减多少(getDiscountJian())。defconvertRate(row):ifrow=='null':return1.0elif':'inrow:rows=row.split(':')return1.0-float(rows[1])/float(rows[0])else:returnfloat(row)defgetDiscountMax(row):ifrow=='null':return0elif':'instr(row):rows=row.split(':')returnint(rows[0])else:return0defgetDiscountJian(row):ifrow=='null':return0elif':'inrow:rows=row.split(':')returnint(rows[1])else:return03.7.2距离距离就是用户与商户的距离,距离的远近完全会影响到优惠券的使用,所以距离可以作为一个特征。defget_distance_feature_potins(pf):print('Distance类型:',pf['Distance'].unique())pf['distance']=pf['Distance'].apply(distace_type)print(pf['distance'].unique())returnpf3.7.3领劵日期对领券日期而言,周末领取优惠券并使用优惠券的可能性更大一些,因此可有选取关于领券日期的特征。这里提取了9个关于领券日期的特征:1. weekday:{null,1,2,3,4,5,6,7}2. weekday_type:{1,0}(周六和周日为1,其他为0)3. Weekday_1:{1,0,0,0,0,0,0}4. Weekday_2:{0,1,0,0,0,0,0}5. Weekday_3:{0,0,1,0,0,0,0}6. Weekday_4:{0,0,0,1,0,0,0}7. Weekday_5:{0,0,0,0,1,0,0}8. Weekday_6:{0,0,0,0,0,1,0}9. Weekday_7:{0,0,0,0,0,0,1}经过上面特征提取总共得到了14个有用的特征,这些特征包含:discount_rate、discount_type、discount_man、discount_jian、distance、weekday、weekday_type、weekday_1、weekday_2、weekday_3、weekday_4、weekday_5、weekday_6、weekday_7。有了这14个特征之后可以使用label函数对训练集进行标注,这样就可以清晰地看出没有领导优惠券和领取优惠券并在15天内使用以及领取优惠券没在15天内使用的样本有多少了。3.8标签特征提取之后再对对训练样本进行labe标注,即确定哪些是正样本(y=1),哪些是负样本(y=0)。我们要预测的是用户在领取优惠券之后15之内的消费情况。总共有三种情况:1.Date_received==‘null’:表示没有领到优惠券,无需考虑,y=-12.(Date_received!=‘null’)&(Date!=‘null’)&(Date-Date_received<=15):表示领取优惠券且在15天内使用,即正样本,y=13.(Date_received!=‘null’)&((Date==‘null’)|(Date-Date_received>15)):表示领取优惠券未在在15天内使用,即负样本,y=0知道规则之后就可以定义标签备注函数了://确定标签,哪些是正样本,哪些是负样本deflable(row):ifrow['Date_received']=='null':return-1ifrow['Date']!='null':td=pd.to_datetime(row['Date'],format='%Y%m%d')-pd.to_datetime(row['Date_received'],format='%Y%m%d')iftd<=pd.Timedelta(15,'D'):return1return0
模型构建与评估4.1建立训练数据集和测试数据集我们用前面提取的14个特征作为特征,为了保证模型的性能。首先要划分验证集做模型验证,这个划分方式是按照领券日期划分。训练集:20160101-20160515,验证集:20160516-20160615。具体划分如下所示:pf_true=pf[pf['label']!=-1].copy()train=pf_true[(pf_true['Date_received']<'20160516')].copy()valid=pf_true[(pf_true['Date_received']>='20160516')&(pf_true['Date_received']<='20160615')].copy()4.2构建模型模型不管多复杂最后出来的都是一个函数,然后再根据函数的定义函数的重点是映射关系。如A到B可以通过各种函数来映射,那我们的模型是从输入到输出的一种映射关系,在数学上映射叫函数,在机器学习中叫模型。folder=StratifiedKFold(n_splits=3,shuffle=True)这里我们构建模型采用的是SGDClassifier,还是用了Python中的Pipeline管道机制,它可以让参数在新数据集,比如测试集上重复使用。管道机制实现了全部步骤的流式化封装和管理。这里交叉验证采用了StratifiedKFold,它的用法与Kfold类似。StratifiedKFold是分层采样,目的是为了确保训练集和测试集中各类别样本的比例与原始数据集中相同。4.3模型训练在开始训练时先只用来用户的两个分析特征,满减折扣率特征。然后拆分为了0-1之间的折扣率discount_rate,并把满X(discount_man)减Y(discount_jian)和折扣类型(discount_type)等列,再把接收优惠券的日期转换为日期类型,把日期枚举值转为了one-hot类型字段,这样分析更方便。使用上面的模型对训练集进行训练,这个训练的过程大约需要两分钟左右。predictors=original_featuremodel=check_model(train,predictors)4.4验证验证就是进行验证计算,这里是根据验证集中每种优惠券预测的结果计算AUC,然后再计算所有优惠券的AUC的平均值。在计算AUC的时候,如果label只有一类,就直接跳过,因为这时AUC是无法进行计算的。y_valid_pred=model.predict_proba(valid[predictors])valid1=valid.copy()valid1['pred_prob']=y_valid_pred[:,1]valid1.head(5)得到概率值pred_prob之后就可以对验证集计算AUC,可以直接调用sklearn库自带的AUC函数进行计算,最后通过验证最终得到AUC结果是0.53。4.5测试训练完模型之后,就是使用训练好的模型对测试集进行测试,将测试集数据转化成对应训练模式时所用特征集,通过之前训练模式,得到预测值,即会去消费的概率。defcheck_test_csv(dftest,model):y_test_pred=model.predict_proba(dftest[original_feature])dftest1=dftest[['User_id','Merchant_id','Coupon_id','Discount_rate','Distance','Date_received']].copy()dftest1['Probability']=y_test_pred[:,1]ifos.path.isfile('result.csv'):os.remove('result.csv')dftest1.to_csv('result.csv')print("end")
研究或成果与社会、环境、文化、经济、环保等关系本文是对基于机器学习O2O优惠券个性化投放的研究。通过用户特征、商户特征、用户商户特征、优惠券特征和其它特征研究了移动优惠券的使用行为。当今我国互联网技术飞速发展,也促使了电子商务的发展,对O2O优惠券的发展也有进一步的推进。O2O优惠券使用率的分析和预测给用户和商家都带来了好处,它给了商家更强的销售能力,帮助商家有效的个性化投放优惠券;它给消费者带来了真正的实惠。根据研究结果表明:商户特征和优惠券特征有明显影响优惠券的使用,用户商户组合特征、用户特征以及其他特征对优惠券的使用有较小影响,商户特征对优惠券使用快慢有明显的影响,优惠券的折扣率跟优惠券的使用快慢正相关,满减优惠券的最低消费金额与移动优惠券的使用快慢负相关,地理特征对移动优惠券使用快慢的影响不明显。本次项目通过预测模型预测出了不错的效果,总的来说本次研究通过测试。
总结本次基于机器学习的O2O优惠券个性化投放到此就接近尾声了,独立完成本次毕业设计设计,让我学到了不少东西。从最开始的一无所知到现在稍稍略懂中间经历了不少困难。Python这门语言之前虽说有一点了解但是对于机器学方面是一点都不了解,甚至是第一次听说。所以难度是很大的,在这个期间不仅需要学习机器学习方面的知识还需要去了解这个课题到底是需要做什么。在写程序的过程中遇到很多麻烦,都需要自己一点一点去查找,因为这个看起来不算很复杂但是里面的知识点太多了,而每一个知识点都需要你自己去弄明白,不然就没有办法去进行下一步任务。写程序的过程中训练模型是最重要的一个部分,只有把模型训练出来后面才能继续,在训练模型之前需要提取相应的特征,这些特征提取也是很麻烦的,不过通过做可视化之后就容易多了。还好在寒假期间也在慕课上学习了一些机器学习的知识,看了不少的资料,不然自己也没有办法完成这项研究。编写程序差不多花了一大半的时间,这样留给我写论文的时间就很仓促了。刚开始写论文是无从下手,感觉是个大难题,但当你有了框架之后就写起来就容易多了。在写论文的过程中发现写的时候又会学到很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 植物细胞的基本结构专家讲座
- 毛泽东思想试题及答案
- 全指自由现金流ETF投资价值分析:康波萧条现金为王
- 一针一线缝吉祥:传统布艺老虎的文化传承与手工实践
- 稀疏矩阵在信号处理中的应用
- 记账实操-商贸公司账务分录(一般纳税人)
- 科普常识动物篇演示教学
- 2026-2030中国EVA乳液行业销售渠道与前景营销创新发展趋势研究报告
- 2026全球及中国勃姆石行业供需态势及产销规模预测报告
- 2025-2030中国氟苯产业运营现状风险与投资销售格局研究研究报告
- 贵州省六盘水市2025-2026学年九年级上学期期末语文试题(含答案)
- 一年级数学5以内加减法计算专项练习题(每日一练共42份)
- 2026年山西云时代技术有限公司校园招聘笔试备考题库及答案解析
- 数字孪生智慧管网监测系统构建课题申报书
- 统编版(新版)道德与法治八年级下册课件13.1全面依法治国的指导思想
- 汽车驾驶员技师论文
- 2025年三季度云南航空产业投资集团招聘(云南云航投现代物流有限公司岗位)考试笔试历年常考点试题专练附带答案详解2套试卷
- 3.长方体和正方体(单元测试)2025-2026学年五年级数学下册人教版(含答案)
- 包装危险货物技术说明书
- 石灰石矿山破碎系统施工方案
- 新教材人教版2019年高中生物课本课后问题参考答案(全集)
评论
0/150
提交评论