作为数据科学家,你会怎样应对这五大挑战?

大数据 数据分析
作为数据科学家,我在很多公司工作过,也遇到了很多问题和挑战。事实上,很多人都会经历这些挑战,就不同情况而言,也会有多种可行的解决方案。我将谈谈我曾面临的一些最常见或最困难的挑战。

 本文转载自公众号“读芯术”(ID:AI_Discovery)

作为数据科学家,我在很多公司工作过,也遇到了很多问题和挑战。事实上,很多人都会经历这些挑战,就不同情况而言,也会有多种可行的解决方案。我将谈谈我曾面临的一些最常见或最困难的挑战。

[[377837]]

业务问题描述不当

只要有一个工作人员出错,你就会面临这个挑战。数据科学专家的主要工作之一就是做业务问题描述——这也就是起初使用数据科学的原因。

实际上,多数情况下描述不是某个数据科学专家自己,而是整个团队。团队里通常包括利益相关者,比如产品经理。但是,团队内可能出现技术脱节,任一方都可能对业务问题描述不当。

产品经理可能会说:“我们要提更多建议,大家才能买的更多”,而数据科学专家可能会说:“向大家推荐产品的时候,超过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)创建新版本。

这些工具可以通过创建区别于主干/代码库的独立分支,帮你形成自己的代码变化。然后就可以创建一个拉取请求来比较代码变化,在获得他人认可后并入原件。如此一来,你就不仅是在创建代码评审,而且还允许大家注意到并更加了解你的特定代码。

如你所见,数据科学家会面临很多挑战,我所谈到的只是冰山一角。但这些问题是我经历最多的,我认为应该重点讨论的。希望我的方法能帮你顺利解决这些问题。

责任编辑:华轩 来源: 读芯术
相关推荐

2019-01-08 16:25:42

数据科学机器学习神经网络

2020-12-16 19:25:50

数据科学数据科学家大数据

2018-01-31 22:30:05

数据科学家数据专家工程师

2017-08-04 15:53:10

大数据真伪数据科学家

2018-08-20 19:24:40

数据科学数据清理数据分析

2023-03-30 14:14:45

Kubernetes

2019-01-29 10:53:07

数据开发Python

2019-01-28 18:43:02

数据科学家Python技巧

2018-08-10 08:35:49

2018-02-07 15:45:37

数据科学家数据技术

2022-06-23 12:33:35

大数据数据分析

2016-09-22 16:30:17

ITPythonSQL queries

2019-07-03 16:10:27

数据科学家数据库数据工程师

2012-12-26 10:51:20

数据科学家

2018-12-24 08:37:44

数据科学家数据模型

2012-12-06 15:36:55

CIO

2018-05-11 14:44:30

机器学习数据科学家算法

2019-06-05 15:17:45

2015-09-15 09:32:50

2020-07-06 09:57:57

编程语言数据Python
点赞
收藏

51CTO技术栈公众号