电子说
作为数据科学家,我在很多公司工作过,也遇到了很多问题和挑战。事实上,很多人都会经历这些挑战,就不同情况而言,也会有多种可行的解决方案。我将谈谈我曾面临的一些最常见或最困难的挑战。
业务问题描述不当
只要有一个工作人员出错,你就会面临这个挑战。数据科学专家的主要工作之一就是做业务问题描述——这也就是起初使用数据科学的原因。
实际上,多数情况下描述不是某个数据科学专家自己,而是整个团队。团队里通常包括利益相关者,比如产品经理。但是,团队内可能出现技术脱节,任一方都可能对业务问题描述不当。
产品经理可能会说:“我们要提更多建议,大家才能买的更多”,而数据科学专家可能会说:“向大家推荐产品的时候,超过80%的情况下我们要有95%的把握。”
这两种问题描述总体来讲都很好,但都不够细化,或者只是勾勒出了问题的轮廓。问题描述是要从中找出解决方案,但是本身并不是解决方案。
以下是一个更好的业务问题描述问题的例子:“顾客平均每个订单只买一件东西”。
就是这么简单。一开始双方都想方设法将描述复杂化,但现在这样更高效。虽然没有解决方案,但人人都能看懂这种直接、通俗易懂的描述。
示例描述说明一件东西不够,那么解决方案可能就是如何让顾客更可能买一件以上的东西。一种数据科学解决方案就是使用机器学习推荐系统。在工作中不要好高骛远,而要专注于眼下的实际问题,这很重要。
数据失衡
任何真正与数据打交道的人大多都会遇到数据失衡的问题。比如,遇到分类问题时使用逻辑回归给新数据赋值0或1。目标变量预计0和1各占50%的可能。然而,结果完全出乎预料。
如果试着将一种新动物归类为狗或者猫,就需要猫狗各1000列的训练数据。这样,模型才足够辨别二者的不同之处。如果训练数据中猫有1900只,狗只有100只,那么就可能产生误解,认为多数新动物都是猫,这是个很常见的问题。
可能的解决方案是使用其他补强少数部分的机器学习算法,或者创建新的综合数据。有一种技术叫不均衡学习(imbalanced-learn),可以采用下列具体方法进行过采样:
ADASYN算法(Adaptive Synthetic,自适应综合过采样)
BorderlineSMOTE算法
KMeansSMOTE算法
RandomOverSampler算法
SMOTNC算法
SVMSMOTE算法(Nominal andContinuous)
这些过采样方法都非常有效,而且能解决数据不均衡问题。还有很多方法,比如欠采样、二者相结合、组合法、Keras和TensorFlow的批量生成器。下面是过采样操作的示例:
画一幅二维视图
绘制已知数据点
选择一个已知点
找出最邻近点
在邻近点与原始数据点之间画一条线
然后随机将大头针丢在这些线上
这就是新合成的过采样数据
像RandomForest之类的一些机器算法函数库的参数要指定均衡数据也很简单。
过拟合
构建的数据科学模型将训练数据解析的太透彻就会出现过拟合问题。模型接收了训练数据中的详细信息,也包括数据中的噪音,所以过于具体,而这在预测新的真实数据时是无用的,结果模型就无法做出正确推断和归纳。模型的目的是处理好未见过的数据,所以要想办法找到能处理好新数据的解决办法并付诸使用。
交叉验证
移除重复或相似特点
及早停止
正则化
集成法
非参数机器学习算法
使用更多数据训练
特征不足
制定业务问题描述之后,通常还需要开始寻找数据,然后形成自己的特点,输入到数据科学模型中作为训练数据。对公司数据表了解的越多,就会发现还可以以其它纵列为新特征。不过,一开始特征有限的问题还有另一种解决办法。
构建当前度量的统计数据。例如,一般具有“每位用户点击量”特征,就会停止。但也可以从如下某一纵列中创建新的度量:
每位用户的平均点击量
每位用户的众数点击量
每位用户75%百分位数点击量
还有很多不同方式来描述该特征的范围。
版本控制
数据科学家非常习惯独自工作,喜欢对同一个重点项目创建20个不同版本的Jupyter Notebook。我们约定好了命名,但第二天就忘记了。然后,一切变得一团糟。但其实还有更好的方式——那就是Git和GitHub。
Git
GitHub
如果数量较少的话,还有其它自制办法,比如用特殊数字方法(例:Notebook1,Notebook2)创建新版本。
这些工具可以通过创建区别于主干/代码库的独立分支,帮你形成自己的代码变化。然后就可以创建一个拉取请求来比较代码变化,在获得他人认可后并入原件。如此一来,你就不仅是在创建代码评审,而且还允许大家注意到并更加了解你的特定代码。
如你所见,数据科学家会面临很多挑战,我所谈到的只是冰山一角。但这些问题是我经历最多的,我认为应该重点讨论的。希望我的方法能帮你顺利解决这些问题。
责编AJX
全部0条评论
快来发表一下你的评论吧 !