Kickstarter是一家美国的众筹平台。自2009年成立至今,已经有36万余个众筹项目在平台上立项,总共筹集到30多亿美元的项目众筹款。其中,众筹项目的成功率为35.83%。
△ 图片来自Kickstarter官网
这篇文章中,iOS开发人员Shrikar将用机器学习预测Kickstarter上项目众筹成功的可能性。它也能帮助发起人调整项目的名称、描述、关键词以及募集资金数,使众筹成功的可能性最大。用上传图片的图像特征提高模型的准确率非常奏效,你可以在Kaggle中获取到这些数据集。
Kaggle数据集地址:
https://www.kaggle.com/codename007/funding-successful-projects
创建数据
几乎所有机器学习问题都会从挖掘数据并且试图了解更多信息开始,我们也不例外。
Kickstarter中需要募集的信息大致有如下几类:
1.Project_id:项目的唯一识别符
2.name:众筹项目名称
3.desc:项目描述
4.keywords:项目关键词
5.disable_communication: 通讯状态
6.country:项目所在国家
7.currency:计划众筹资金
8.deadline:众筹截止日期
9.state_changed_at:状态变更
10、created_at:成功后项目开始日期
11.launched:项目计划完成日期
12.backers_count: 赞助人数量
13.final_status: 目标变量
特征工程
我们需要加入一些特征来创建机器学习模型,duration和cleaned_text就是很好的选择。下面我们将拟添加特征罗列出来:
all_text:项目名称+描述+关键词(需除去连字符)
duration:项目总持续时间
days_status_changed:改变后到截止时的日期数
cleaned_text:删除标点并且只留文本
试探性数据分析(EDA)
△ 以国家为标准划分Kickstarter上的项目
△ 以国家标准划分的项目是否众筹成功
△ 项目中的最高筹集金额
scikit-learn提供了一种极好的特征可以用来构建模型,也就是我们常说的管道(Pipeline)。本案例中既有文本特征也有数值,所以我们需要有区别地转换它们。
首先,我们需要看看在被机器学习算法使用前,如何用特征联合(feature union)合并特征。
为了用特征联合合并,我们需要建立几个转换器混入(mixin)。这些混入可以使我们从计算机中提取某些列,并将它们传递给不同的转换器。
我们看看怎样构建模型并安装管道。
结果如下:
在这种情况下,目标类是不平衡的:
所以我们如果总是预测输出为0,那么将纠正(73568)/(73568+34561)≈68%的情况。模型能以目前86%的准确度来学习,我们基本上就能放心了。如果出现不平衡的情况,可以用AUC曲线(Area Under Curve)评估模型。
如要进一步探索,请移步GitHub代码区:
https://github.com/sarchak/MachineLearningNotebooks
【完】