写点什么

数据人必知:这 11 个建模错误可能毁掉你的职业前途

  • 2019-10-30
  • 本文字数:2791 字

    阅读完需:约 9 分钟

数据人必知:这11个建模错误可能毁掉你的职业前途

对我来说,数据科学家们使用高级软件包、创建令人眼花缭乱的演示方案以及不同算法,绝对是种感官与心灵的双重享受。数据科学家们有种神秘的气质——穿上一件酷酷的 T 恤、再加上一杯咖啡和一台笔记本,然后在不动声色之间成就非凡。



但这里要给各位从业者,特别是新手数据科学家们提个醒,某些致命错误很可能在一夜之间摧毁你的辛勤付出。这些错误会损害数据科学家的声誉,甚至彻底断送原本光明的数据科学从业前景。本文的目标也非常简单:帮助大家规避这类错误。

(1) 为什么“Datetime”变量是最重要的变量?

请注意以 yymmdd:hhmmss 格式存在的任意 datetime 字段,我们不能在任何基于树状结构的方法中使用此变量。


如下图所示,该变量的重要性冠绝群伦,这是因为其几乎被作为所有记录的唯一标识符,正如我们会在决策树中使用“id”字段一样。


另外,几乎可以肯定的是,大家会直接从该字段中导出年、月、日、工作日等信息。请记住,特征工程的核心,在于捕捉可重复模式(例如特定某个月或者某一周)以预测未来。


虽然在某些模型中,我们可以使用“year”作为变量来解释过去曾经发生的任何特定波动,但请永远不要将原始的 datetime 字段用作预测变量。


(2) 注意变量中的“0”、“-99”或“-999”


这些通常属于缺失值,因此系统将其设定为极值形式。在参数回归当中,请勿盲目将它们当成可用数值。


不同的系统,可能会设定出“-99”或者“-999”等形式的极值。这些值代表着某些特定含义,且不会随机缺失。请注意,不要在库等软件中盲目处理这类普遍存在的问题。

(3) 如何某个连续变量中包含“NA”、 “0”、“-99”或“-999”,该怎样处理?

我建议大家对该连续变量进行归类,将其中的“0”、“-99”、“NA”等特殊值划分为独立的一类(当然也可以采用其他处理方法)。首先,我们可以为该变量设定分位点:


CD008_cutpoints = quantile(train$CD008, prob = seq(0, 1, 0.1) ,na.rm=TRUE)CD008_cutpoints
复制代码


分位点如下所示:



接下来,利用以上分位点对变量进行归类,从而创建出新的变量。以下代码就保留有这类特殊值。这里我使用函数 cut()将连续变量划分为分类变量。我使用 case_when()来分配“-999”、“-99”、“0”以及“NoData”。(请注意,以下为 R 语言代码,但分类概念也适用于其他编程语言。)


CD008_cutpoints = c(-99,0,1729,3826,5733.5,7763,10003.5,12663,16085,20971,29357,365483)
# The right treament is this:train <-train %>% mutate(CD008_D = cut(CD008, breaks = CD008_cutpoints) ) %>% mutate(CD008_D = case_when( CD008 == -999 ~ "-999", CD008 == -99 ~ "-99", CD008 == 0 ~ "0", is.na(CD008) ~ "NoData", TRUE ~ as.character(CD008_D) ) ) # Understand the frequencytrain %>% count(CD008_D)
复制代码


(4) 强制将分类变量转换为基本变量

大家可能希望把分类变量转换为数字变量以运行回归,但却错误地将分类变量强制转换为数字变量。下图所示为将类别“AP006”强行转换为数字变量的结果。如果在回归中使用这个新变量,则品牌“Android”的值将比“h5”的值高出两倍。


# Understand the frequencytrain %>% count(AP006)# The original categorical variablehead(train$AP006,20)# Converted (mistakenly) to a numeric variablenewvar = as.numeric(train$AP006)head(newvar,20)
复制代码


(5) 忘记处理回归中的异常值


图中的异常值会导致您的回归偏向该观察值,并导致预测结果发生偏差。

(6) 要求线归回归中的因变量符合正态假设

因变量 Y 不必遵循正态分布,但是预测 Y 的相关误差应该遵循正态分布。数据科学家经常检查因变量直方图中的正态性假设。在这种特定情况下,如果因变量遵循正态分布,则会引发错误。


需要再次强调,基本根据是线性回归的误差应遵循正态分布,或者因变量本身会呈现出有条件的正态分布。我们先来回忆一下线性回归的定义:在 X 的每个值中,都存在一个符合正态分布的有条件 Y 分布。以下为线性回归的四大基本假设:


  • X 与 Y 之间为线性相关。

  • 误差为正态分布。

  • 误差具有同方差性(或者说与线周围的方差相关)。

  • 观察的独立性。


根据大数定律与中心极限定理,线性回归中的最小二乘法(OLS)估计值仍将近似真实地分布在参数真值周围。因此,在一个大样本中,即使因变量不符合“正态假设”规则,线性回归方法仍能够发挥作用。

(7) 要求线性回归中的预变量符合正态假设

那么预测变量 X 呢?回归不会假设预测变量具有任何分布属性,其唯一的要求就是检查是否存在异常值(可使用盒型图检查异常值)。如果存在,则在该预测变量中应用上限与下限方法。

(8) 是否需要在决策树中做出分布假设?


在参数式(例如线性回归)中,我们可以检查目标变量的分布以选择正确的分布。例如,如果目标变量呈现出 gamma 分布,则可以在广义线性模型(GLM)中选择 gamma 分布。


但是,决策树不会对目标变量进行假设。决策树的基本工作原理,是将每个父节点尽可能划分为不同的节点。决策树不会对初始群体或者最终群体的分布做任何假设。因此,分布的性质不影响决策树的实现。

(9) 是否需要在决策树中为预测变量设置上限与下限?


在参数式(例如线性回归)中,我们必须将异常值的上限设置为 99%(或 95%)并将下限设置为 1%(或 5%),从而处理异常值。在基于树状结构的算法当中,基本不需要在决策树中设置上限与下限。


换言之,决策树对于异常值具有鲁棒性。树算法会在同数值基础上拆分数据点,因此离群值不会对拆分产生太大影响。实际上,如何处理取决于您的超参数设置方式。

(10) 我的树中没有多少变量,或者变量数极少

这可能代表大家把复杂度参数(cp)设置得太高。复杂度参数(cp)代表的是每个节点所需要的最小模型改进。我们可以借此拆分节点来改善相对误差量。如果对初始根节点进行拆分,且相对误差从 1.0 降至 0.5,则根节点的 cp 为 0.5。

(11) 忘记对 K 均值中的变量进行标准化


K 均值聚类可能是目前最流行的无监督技术,也确实能够带来很好的聚类效果。但是,如果没有将变量标准化为相同的大小,则可能给集群结果乃至业务应用带来灾难性的后果。


这里,我们用一个简单的例子进行解释。假设(X,Y)空间中的 P1、P2 与 P3 位置分别为(3000,1)、(2000,2)以及(1000,3)。K 均值计算出 P1 与 P2 之间的距离为 1000.0005。由于 X 的大小决定 Y 值,因此 X 会给结果带来错误影响。我们需要将 X 与 Y 设置为相同的大小。在本示例中,我们可以在 K 均值中将 X 表示为 X2 以计算距离。



下面列出几种可行方法:


(1) 缩放至 (0,1):


range01 <- function(x){(x-min(x))/(max(x)-min(x))}
range01(X)
复制代码


(2) Z 分数:


scale(X, center = TRUE, scale = TRUE)
复制代码


(3) 达到与先验知识相同的程度。在本示例中,我们知道 X 的大小为 Y 的 1000 倍,因此可以将 X 除以 1000 来生成 X2,其大小与 Y 相同。


原文链接:


Avoid These Deadly Modeling Mistakes that May Cost You a Career


2019-10-30 11:001663

评论

发布
暂无评论
发现更多内容

文档管理:企业进步的重要因素

小炮

文档管理

满满干货!手把手教你实现基于eTS的HarmonyOS分布式计算器

HarmonyOS开发者

HarmonyOS ETS

小程序转APP,小团队也能实现数字化生态闭环

Speedoooo

APP开发 跨端开发 小程序容器 小程序转app 跨端运行

【LeetCode】调整数组顺序使奇数位于偶数前面Java题解

Albert

LeetCode 5月月更

昆仑数据库可定制的数据分片方案

KunlunBase昆仑数据库

国产数据库

数据库堡垒机品牌有哪些?买哪家划算?咨询电话多少?

行云管家

网络安全 信息安全 数据安全 堡垒机

火山引擎A/B测试私有化实践

字节跳动数据平台

实验 火山引擎 私有化部署 ab测试

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

阿里巴巴中间件

阿里云 中间件 函数计算

2022年中国消费金融数字化发展分析

易观分析

消费金融

MySQL-8.0 Group Replication 研究与改造汇总

KunlunBase昆仑数据库

国产数据库 MySQL 数据库

2022第八届华为软件精英挑战赛全球总决赛圆满落幕,冠军奖金20万!

科技热闻

《阿里云代码安全白皮书》5个维度应对3类代码安全问题

阿里云云效

云计算 阿里云 代码管理 代码托管 代码安全

EMQX+阿里云Tablestore多场景一站式IoT数据解决方案正式发布

EMQ映云科技

阿里云 物联网 一站式平台 emqx 5月月更

昆仑分布式数据库系统简介 之 SQL 标准兼容性和日常维护工作

KunlunBase昆仑数据库

国产数据库

烧录OpenHarmony 3.2(尝鲜版)步骤

离北况归

OpenHarmony OpenHarmony3.2

netty系列之:epoll传输协议详解

程序那些事

Java Netty 程序那些事 5月月更

KunlunBase 查询优化(一)

KunlunBase昆仑数据库

MySQL 数据库 国产数据库

KunlunBase 查询优化(二)Project 和 Filter 下推

KunlunBase昆仑数据库

国产数据库

昆仑分布式数据库Sequence功能及其实现机制

KunlunBase昆仑数据库

国产数据库

什么是显卡?GPU服务器到底有什么作用?

Finovy Cloud

gpu GPU服务器

谈谈技术能力

阿里巴巴中间件

阿里云 程序员 中间件 技术思考

leetcode 451. Sort Characters By Frequency 根据字符出现频率排序

okokabcd

LeetCode 排序

三分钟让你了解 vue 中的父子通讯

CRMEB

KunlunBase 查询优化(三)排序下推

KunlunBase昆仑数据库

国产数据库

数据库系统最佳实践系列 --- 使用 prepared statement

KunlunBase昆仑数据库

国产数据库

手绘图解java类加载原理

华为云开发者联盟

Java 类加载 元数据 类静态

微擎同步粉丝不显示头像和昵称?

智伍应用

微擎 php开源

SaaS应用:企业数字化转型性价比最高的方式

小炮

【二级等保】二级等保怎么做?价格怎么样?贵吗?

行云管家

运维 网络安全 堡垒机 运维审计

深入解读SQL的聚集函数

华为云开发者联盟

sql GaussDB(DWS) 聚集操作 主键列

关于加密通道规范,你真正用的是TLS,而非SSL

华为云开发者联盟

TLS 加密 ssl 加密通道 CA系统

数据人必知:这11个建模错误可能毁掉你的职业前途_文化 & 方法_Dataman_InfoQ精选文章