数据的游戏:冰与火
我对数据挖掘和机器学习是新手,从去年7月份在Amazon才开始接触,而且还是因为工作需要被动接触的,以前都没有接触过,做的是需求预测机器学习相关的。后来,到了淘宝后,自己凭兴趣主动地做了几个月的和用户地址相关数据挖掘上的工作,有一些浅薄的心得。下面这篇文章主要是我做为一个新人仅从事数据方面技术不到10个月的一些心得,也许对你有用,也许很傻,不管怎么样,欢迎指教和讨论。
另外,注明一下,这篇文章的标题模仿了一个美剧《权力的游戏:冰与火之歌》。在数据的世界里,我们看到了很多很牛,很强大也很有趣的案例。但是,数据就像一个王座一样,像征着一种权力和征服,但登上去的路途一样令人胆颤。
目录
数据挖掘中的三种角色
在Amazon里从事机器学习的工作时,我注意到了Amazon玩数据的三种角色。
- Data Analyzer:数据分析员。这类人的人主要是分析数据的,从数据中找到一些规则,并且为了数据模型的找不同场景的Training Data。另外,这些人也是把一些脏数据洗干净的的人。
- Research Scientist:研究科学家。这种角色主要是根据不同的需求来建立数据模型的。他们把自己戏称为不近人间烟火的奇异性物种,就像《生活大爆炸》里的 那个Sheldon一样。这些人基本上玩的是数据上的科学
- Software Developer :软件开发工程师。主要是把 Scientist 建立的数据模型给实现出来,交给Data Analyzer去玩。这些人通常更懂的各种机器学习的算法。
我相信其它公司的做数据挖掘或是机器学习的也就这三种工作,或者说这三种人,对于我来说,
- 最有技术含量的是 Scientist,因为数据建模和抽取最有意义的向量,以及选取不同的方法都是这类人来决定的。这类人,我觉得在国内是找不到的。
- 最苦逼,也最累,但也最重要的是Data Analyzer,他们的活也是这三个角色中最最最重要的(注意:我用了三个最)。因为,无论你的模型你的算法再怎么牛,在一堆烂数据上也只能干出一堆垃圾的活来。正所谓:Garbage In, Garbage Out !但是这个活是最脏最累的活,也是让人最容易退缩的活。
- 最没技术含量的是Software Developer。现在国内很多玩数据的都以为算法最重要,并且,很多技术人员都在研究机器学习的算法。错了,最重要的是上面两个人,一个是苦逼地洗数据的Data Analyzer,另一个是真正懂得数据建模的Scientist!而像什么K-Means,K Nearest Neighbor,或是别的什么贝叶斯、回归、决策树、随机森林等这些玩法,都很成熟了,而且又不是人工智能,说白了,这些算法在机器学习和数据挖掘中,似乎就像Quick Sort之类的算法在软件设计中基本没什么技术含量。当然,我不是说算法不重要,我只想说这些算法在整个数据处理中是最不重要的。
数据的质量
目前所流行的Buzz Word——大数据是相当误导人的。在我眼中,数据不分大小,只分好坏。
在处理数据的过程中,我第一个感受最大的就是数据质量。下面我分几个案例来说明:
案例一:数据的标准
在Amazon里,所有的商品都有一个唯一的ID,叫ASIN——Amazon Single Identify Number,这个ID是用来标识商品的唯一性的(来自于条形码)。也就是说,无论是你把商品描述成什么样,只要ASIN一样,这就是完完全全一模一样的商品。
这样,就不像淘宝一样,当你搜索一个iPhone,你会出现一堆各种各样的iPhone,有的叫“超值iPhone”,有的叫“苹果iPhone”,有的叫“智能手机iPhone”,有的叫“iPhone 白色/黑色”……,这些同一个商品不同的描述是商家为了吸引用户。但是带来的问题有两点:
1)用户体验不好。以商品为中心的业务模型,对于消费者来说,体验明显好于以商家为中心的业务模型。
2)只要你不能正确读懂(识别)数据,你后面的什么算法,什么模型统统没用。
所以,只要你玩数据,你就会发现,如果数据的标准没有建立起来,干什么都没用。数据标准是数据质量的第一道关卡,没这个玩意,你就什么也别玩了。所谓数据的标准,为数据做唯一标识只是其中最最基础的一步,数据的标准还单单只是这个,更重要的是把数据的标准抽象成数学向量,没有数学向量,后面也无法挖掘。
所以,你会看到,洗数据的大量的工作就是在把杂乱无章的数据归并聚合,这就是在建立数据标准。这里面绝对少不了人肉的工作。无非就是:
- 聪明的人在数据产生之前就定义好标准,并在数据产生之时就在干数据清洗的工作。
- 一般的人是在数据产生并大量堆积之后,才来干这个事。
另外,说一下Amazon的ASIN,这个事从十多年前就开始了,我在Amazon的内网里看到的资料并没有说为什么搞了个这样一个ID,我倒觉得这并不是因为Amazon因为玩数据发现必需建议个商品ID,也许因为Amazon的业务模型就是设计成以“商品为中心”的。今天,这个ASIN依然有很多很多的问题,ASIN一样不能完全保证商品就是一样的,ASIN不一样也不代表商品不一样,不过90%以上的商品是保证的。Amazon有专门的团队Category Team,里面有很多业务人员天天都在拼命地在对ASIN的数据进行更正。
案例二:数据的准确
用户地址是我从事过数据分析的另一个事情。我还记得当时看到那数以亿计的用户地址的数据的那种兴奋。但是随后我就兴奋不起来了。因为地址是用户自己填写的,这里面有很多的坑,都不是很容易做的。
第一个是假/错地址,因为有的商家作弊或是用户做测试。所以地址是错的,
- 比如,直接就输入“该地址不存在”,“13243234asdfasdi”之类的。这类的地址是可以被我的程序识别出来的。
- 还有很难被我的程序所识别出来的。比如:“宇宙路地球小区”之类的。但这类地址可以被人识别出来。
- 还有连人都识别不出来的,比如:“北京市东四环中路23号南航大厦5楼540室”,这个地址根本不存在。
第二个是真地址,但是因为用户写的不标准,所以很难处理,比如:
- 缩写:“建国门外大街” 和 “建外大街”,“中国工商银行”和“工行”……
- 错别字:“潮阳门”,“通慧河”……
- 颠倒:“东四环中路朝阳公园” 和 “朝阳公园 (靠东四环)” ……
- 别名:有的人写的是开发商的小区名“东恒国际”,有的则是写行政的地名“八里庄东里”……
这样的例子多得不能再多了。可见数据如果不准确,会增加你处理的难度。有个比喻非常好,玩数据的就像是在挖金矿一样,如果含金量高,那么,挖掘的难度就小,也就容易出效果,如果含金量低,那么挖掘的难度就大,效果就差。
上面,我给了两个案例,旨在说明——
1)数据没有大小之分,只有含金量大的数据和垃圾量大的数据之分。
2)数据清洗是一件多么重要的工作,这也是一件人肉工作量很大的工作。
所以,这个工作最好是在数据产生的时候就一点一滴的完成。
有一个观点:如果数据准确度在60%的时候,你干出来的事,一定会被用户骂!如果数据准确度在80%左右,那么用户会说,还不错!只有数据准确度到了90%的时候,用户才会觉得真牛B。但是从数据准确度从80%到90%要付出的成本要比60% 到 80%的付出大得多得多。大多数据的数据挖掘团队都会止步于70%这个地方。因为,再往后,这就是一件相当累的活。
数据的业务场景
我不知道有多少数据挖掘团队真正意识到了业务场景和数据挖掘的重要关系?我们需要知道,根本不可能做出能够满足所有业务的数据挖掘和分析模型。
推荐音乐视频,和电子商务中的推荐商品的场景完全不一样。电商中,只要你买了一个东西没有退货,那么,有很大的概率我可以相信你是喜欢这个东西的,然后,对于音乐和视频,你完全不能通过用户听了这首歌或是看了这个视频就武断地觉得用户是喜欢这首歌和这个视频的,所以,我们可以看到,推荐算法在不同的业务场景下的实现难度也完全不一样。
说到推荐算法,你是不是和我一样,有时候会对推荐有一种感觉——推荐就是一种按不同维度的排序的算法。我个人以为,就提一下推荐这个东西在某些业务场景下是比较Tricky的,比如,推荐有两种(不是按用户关系和按物品关系这两种),
- 一种是共性化推荐,结果就是推荐了流行的东西,这也许是好 的,但这也许会是用户已知的东西,比如,到了北京,我想找个饭馆,你总是给我推荐烤鸭,我想去个地方,你总是给我推荐天安门故宫天坛(因为大多数人来北京就是吃烤鸭,就是去天安门的),这些我不都知道了嘛,还要你来推荐?另外,共性化的东西通常是可以被水军刷的。
- 另一种是一种是个性化推荐,这个需要分析用户的个体喜好,好的就是总是给我我喜欢的,不好的就是也许我的口味会随我的年龄和环境所改变,而且,总是推荐符合用户口味的,不能帮用户发掘新鲜点。比如,我喜欢吃辣的,你总是给我推荐川菜和湘菜,时间长了我也会觉得烦的。
推荐有时并不是民主投票,而是专业用户或资深玩家的建议;推荐有时并不是推荐流行的,而是推荐新鲜而我不知道的。你可以看到,不同的业务场景,不同的产品形态下的玩法可能完全不一样,
另外,就算是对于同一个电子商务来说,书、手机 和服装的业务形态完全不一样。我之前在Amazon做Demand Forecasting(用户需求预测)——通过历史数据来预测用户未来的需求。
- 对于书、手机、家电这些东西,在Amazon里叫Hard Line的产品,你可以认为是“标品”(但也不一定),预测是比较准的,甚至可以预测到相关的产品属性的需求。
- 但是地于服装这样的叫Soft Line的产品,Amazon干了十多年都没有办法预测得很好,因为这类东西受到的干扰因素太多了,比如:用户的对颜色款式的喜好,穿上去合不合身,爱人朋友喜不喜欢…… 这类的东西太容易变了,买得人多了反而会卖不好,所以根本没法预测好,更别Stock/Vender Manager 提出来的“预测某品牌的某种颜色的衣服或鞋子”。
对于需求的预测,我发现,长期在这个行业中打拼的人的预测是最准的,什么机器学习都是浮云。机器学习只有在你要面对的是成千上万种不同商品和品类的时候才会有意义。
数据挖掘不是人工智能,而且差得还太远。不要觉得数据挖掘什么事都能干,找到一个合适的业务场景和产品形态,比什么都重要。
数据的分析结果
我看到很多的玩大数据的,基本上干的是数据统计的事,从多个不同的维度来统计数据的表现。最简单最常见的统计就是像网站统计这样的事。比如:PV是多少,UV是多少,来路是哪里,浏览器、操作系统、地理、搜索引擎的分布,等等,等等。
唠叨一句,千万不要以为,你一天有十几个T的日志就是数据了,也不要以为你会用Hadoop/MapReduce分析一下日志,这就是数据挖掘了,说得难听一点,你在做的只不过是一个统计的工作。那几个T的Raw Data,基本上来说没什么意义,只能叫日志,连数据都算不上,只有你统计出来的这些数据才是有点意义的,才能叫数据。
当一个用户在面对着自己网店的数据的时候,比如:每千人有5个人下单,有65%的访客是男的,18-24岁的人群有30%,等等。甚至你给出了,你打败了40%同类型商家的这样的数据。作为一个商户,面对这些数据时,大多数人的表现是完全不知道自己能干什么?是把网站改得更男性一点,还是让年轻人更喜欢一点?完全不知道所措。
只要你去看一看,你会发现,好些好些的数据分析出来的结果,看上去似乎不错,但是其实完全不知道下一步该干什么?
所以,我觉得,数据分析的结果并不仅仅只是把数据呈现出来,而更应该关注的是通过这些数据后面可以干什么?如果看了数据分析的结果后并不知道可以干什么,那么这个数据分析是失败的。
总结
综上所述,下面是我觉得数据挖掘或机器学习最重要的东西:
1)数据的质量。分为数据的标准和数据的准确。数据中的杂音要尽量地排除掉。为了数据的质量,大量人肉的工作少不了。
2)数据的业务场景。我们不可能做所有场景下的来,所以,业务场景和产品形态很重要,我个人感觉业务场景越窄越好。
3)数据的分析结果,要让人能看得懂,知道接下来要干什么,而不是为了数据而数据。
搞数据挖掘的人很多,但成功的案例却不多(相比起大量的尝试来说),就目前而言,我似乎觉得目前的数据挖掘的技术是一种过渡技术,还在摸索阶段。另外,好些数据挖掘的团队搞得业务不业务,技术不技术的,为其中的技术人员感到惋惜……
不好意思,我只给出了问题,没有建议,这也说明数据分析中有很多的机会……
最后,还要提的一个是“数据中的个人隐私问题”,这似乎就像那些有悖伦理的黑魔法一样,你要成功就得把自己变得黑暗。是的,数据就像一个王座一样,像征着一种权力和征服,但登上去的路途一样令人胆颤。
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《数据的游戏:冰与火》的相关评论
我很喜欢看你的文章,如果写文章时能严谨一些就更令人舒畅了。
例如“ 这类人的人主要是分析数据的 ” 改成“ 这类人的工作主要是分析数据的 ”
分析数据的结果做出推测和游戏AI交互类似 这个业务需求是动态变化的
数据。。。
挑点刺:
“另一种是一种是个性化推荐” 应为 “另一种是个性化推荐”
“但是地于服装这样的叫Soft Line的产品” 应为 “但是对于服装这样”
“大量人肉的工作”,具体指什么,能再细说一下吗?
@Tonny
这样讲简洁一些.
写的不错~
这样,就不像淘宝一样,当你搜索一个iPhone,你会出现一堆各种各样的iPhone,有的叫“超值iPhone”,有的叫“苹果iPhone”,有的叫“智能手机iPhone”,有的叫“iPhone 白色/黑色”……,这些同一个商品不同的描述是商家为了吸引用户。
亚马逊不也是这样的吗?
您说的太对了, 包括我们在研究的时候都是为了机器学习而机器学习, 为了挖掘而挖掘, 都没有设身处地想想这些方法是否适用于这个场景
@花开
每当看到这种回复就很希望发言者也能写一篇博客好好谈谈。可惜现实是大家都很忙,能像耗子叔这样自建站写博客的还是少数。
“数据没有大小之分,只有含金量大的数据和垃圾量大的数据之分”, 非常同意给这个观点。
但是不同意楼主说的”最没技术含量的是Software Developer”,因为开发工程师(或者直接跟用户交互的那层)是数据的直接来源,这个地方的入口直接决定了后面产生的数据质量问题,怎么引导用户提供良好的信息,或者让客户明白提供正确信息的必要性,这些是开发及前端等等工程师需要考虑到问题,这些数据的质量很大程度上决定了后面的工作。
但是要考虑这些问题又要一定程度上研究用户、同行产品等等,有点无穷尽也的意思…
“数据没有大小之分,只有含金量大的数据和垃圾量大的数据之分”
这话启发很大
感觉做数据分析真是一件非常ugly的苦差事。你要和给你数据的那一方对接,但是他们往往给你很糟糕和很少的数据,让你觉得他们在扯淡(他们产生数据的工作没做好),但是又拿他们没办法。这样就导致你的模型再NB也没啥用,毕竟人家不配合,哎。
就最后一段话和一点稀泥, 有权力(power)的人不可怕, 有权力而不负责的人才可怕, 有权力又负责但责任感错位的人最可怕.
受益了,多谢耗子哥
@ammon
是指的所有用户填写的地址信息,淘宝可以保存多个送货地址,皓哥文中也有提到说有些地址只是商家用来测试的,还有些奇葩地址可能就是用户添着玩而不用来实际操作。
说的太对了,一看就知道是真正搞过数据的。大数据真不是灵丹妙药,数据量也不是越大越好,sampling在大数据里面的重要性一点儿也没降低。
不过从工具角度来理解,大数据确实还是有其意义的,衍生出来的一系列产品比如Pig和Hive之类的,确实扩展了海量数据处理的能力和效率。不过从业务模型上来说,还差的太远。
虽然现在口号喊得响亮,但是我感觉工业界真正在使用和部署所谓的大数据的时候,是极端的保守的,简单可控外加性能稳定才是他们追求的目标,和学术界差别太大了。
赞同
赞同
看来我以前干的都是数据统计的工作,分析的很深入,受教了!
数据挖掘这方面真是太高深了
浩叔,请教个问题,最近在学校做项目设计到一些开源项目的修改,代码量较大用c语言编写,这种项目该如何调试?有没有好的方法。浩叔有时间能不能写篇博客。。
做游戏,也要进行这么庞大的数据分析。基础很重要,数据分析个人感觉还是比较难的额。
“这类人,我觉得在国内是找不到的。” 既然你对这个方向不了解,就不要擅自下论断,这样是不严谨,不科学的。虽然我不是搞机器学习的,但是我自己也知道国内在机器学习领域做到国际一流水平的人有不少,当然学术泰斗级别的可能还需要时间积淀。在计算机的学术圈里,引用能过100的文章,都能算是不错的文章。 我就随便贴几个:
http://scholar.google.com/citations?user=rSVIHasAAAAJ&hl=en
http://scholar.google.com/citations?user=QLLFowsAAAAJ&hl=en
http://scholar.google.com/citations?user=axsP38wAAAAJ&hl=en
当然,长期看皓哥文章,技术部分还是没话说。 学习了不少~
地址那個問題,我覺得有些網站做的就挺好。它待你輸入完地址后,自動轉換成它數據庫內的標準格式地址,然後讓你確認是否正確。這樣就大大減少了混亂的地址寫法出現的幾率。
大牛都往taobao跑!
那几个T的Raw Data,基本上来说没什么意义,只能叫日志,连数据都算不上,只有你统计出来的这些数据才是有点意义的,才能叫数据。
对这一点非常赞同,大日志不等于大数据。
看到了不同的观点
不过作者的观点个人不是很认同
在编程这块 看多你的一些文章 不错
但是这块确实觉得是一个新人
你让DBA和SD集成一身的我们情何以堪。。。
才工作几个月???
@rookiepig
+1。
机器学习这块,国内还是有些高校和研究所做得不错的,而且在现阶段,企业内部的Data Mining,Machine Learning都少不了这些研究者的支撑(我在课堂上听过真实的案例)。
关于“数据挖掘”中的三种角色的描述不是特别认同(主要是关于Scientist和Developer的),根据我个人从课堂上学习的浅薄认识,Scientist是要对模型和算法都精通的,在建立了正确合理靠谱的模型之后,会给出算法实现,也就是模型和算法不分家。耗子哥说的Developer的工作没含量,估计是指直接用ML的lib解决问题的吧。
另外,我觉得机器学习这里的算法还远称不上成熟(至少存在维度灾难,泛化能力有限等问题)。
从本文中瞥见了数据发掘目前在业内的大体情况,学习了~
从其他地方看到转载,发现错误太多,忍不住comment一下.
首先,关于machine learning and data mining,楼主才学了几个月的皮毛,就不要在这里误导人了。先指出几个明显的错误,不吐不快。
“Data Analyzer:数据分析员”
数据分析员或者分析师叫Data Analyst. Data Analyzer是数据分析器.
“Software Developer :软件开发工程师。主要是把 Scientist 建立的数据模型给实现出来,交给Data Analyzer去玩。这些人通常更懂的各种机器学习的算法。”
不要误导人了,Software Developer主要是编程.根本不需要懂也不可能懂各种machine learning算法.另外研究机器学习算法的大规模研究或者实现的Data Scientist 和研究大规模数据架构的Data Engineer未见你提及.
“数据没有大小之分,只有含金量大的数据和垃圾量大的数据之分。”
What a joke!众多大数据的前沿技术以及大数据用得最多的Hadoop技术被你一下子全否决了. 大数据主要处理unstrcutral data和big data, 特别是non-quantified, un-managed, or descriptive data. 比如 web data or text data.大数据问题的主要困难是如何处理Internet-scale data, ultra high-dimensionality, high volume, low latency, 和online learning, 特别是p>>N的问题,这些都是machine learning的前沿.
而所有这一切的一切,在小数据量上是不存在的.
“而像什么K-Means,K Nearest Neighbor,或是别的什么贝叶斯、回归、决策树、随机森林等这些玩法,都很成熟了,而且又不是人工智能,说白了,这些算法在机器学习和数据挖掘中,似乎就像Quick Sort之类的算法在软件设计中基本没什么技术含量。”
WTF!!你说的每一项都依然在不断的研究之中,而且每一想都有很多学问可做,绝不可能像quick sort那么simple and naive.大牛你对你说的每个算法都理解么?如果不理解就不要大发厥词了!
“我不是说算法不重要,我只想说这些算法在整个数据处理中是最不重要的。”
totally no words…虽然说算法不能说是最重要的,但也绝不可能是最不重要的.
文章中的错误还有很多很多,.. 建议楼主继续学习,否则还是不要在这里误导小同学了.
关键是目前来说,大部分从业者只是解决目前手头/眼下的问题。。很少达到—-最有技术含量的是 Scientist—这境界。一是自身起点(技术)没这么高,一是自身需求没这么高。可惜但是无奈。
比喻很高端
顶耗子哥。
整天看到虎嗅网在那吹大数据,真他妈要吐了。
大忽悠还差不多。
耗子哥这篇文章太犀利了,现在的大数据和人工智能在应用层面上根本就一点都还不到火候。
那些整天想着招几个数据挖掘工程师,每天爬几个数据就想挖出金矿的公司还是醒醒吧。
还不如想想怎么完善产品的用户体验,这才是实实在在的。
而不是整天拿数据忽悠来忽悠去的。
楼主说的 ANSI是不是就spu的概念,是一个商品的标准标尺
皓哥,我在淘宝做商品图谱的时候都体会到了。运营的和技术的同学做的事情扯的非常模糊。产品词,风格词,品牌词,属性词库里的脏数据非常多。上面的算法根本没法干活。
这篇文章说明了写一篇好文章得多难啊
@nono
你提及的内容,可能楼主是错的,可能你是对的,但我不欣赏你这种说话的方式。
首先,技术类的文章,也能归为学术文章的范畴,写出来,本来就不能被认为是百分之百正确的。任何人看一篇文章,本来就应该带批判的目光去看,找出了错误,找出了自己认为不对的地方,提出来,大家共同讨论,最后得出一个大家就能接受的结论,这才是正道。
“不要在这里误导小同学了”,这样的话,就不要说了。作为读者,我们有分辨力,楼主也没有在这儿标榜自己写的就是金科玉律,我们本也没期望他写的百分之百就是正确或是准确的。但是我们欣赏与感谢这种愿意写文章分享自己知识与想法的人。
再说了,你说的东西也还不一定是对的,或被所有人认可呢。你以一种居高临下的姿态出现,请问,你写了多少文章分享过给大家?
这里其实有三个问题,第一个是如何把数据变得靠谱,第二个如何从系统的角度支持大规模的数据的处理,第三个是如何从数据中挖掘规律。第一个问题最好是在数据产出的时候就考虑到,这一点钻风是对的。但是有时候数据产出端我们没法控制,就需要一些复杂的算法(或者大量的人工)来清洗数据。第二个问题就是Hadoop这套东西来解决,这套东西是系统设计的范畴,主要不是算法。第三个问题是从数据挖掘规律,这个也是算法密集型的,不过如果数据质量OK的话,现有的算法工具也可以搞定很多问题了,实在不行,才需要考虑一些更新颖的算法。
这篇文章从一个学习者角度出发,确实有启发作用,能够看透些业内现状,但从学术角度出发,有些看法过于武断,但不管怎么样还是谢谢楼主分享。
做了很短一段时间的大数据分析,不到一年。我觉得任何一篇技术文章都要看到上下文。现在很多人以为做大数据/data mining就是2点,数据够大,用了machine learning,或者并行计算,又或者有些人还认为machine learning能解决一切问题. 也许作者也曾被类似这种观点误导过,现在从自己的经验中提出反驳。我个人的观点和前面的“花开”网友的观点差不多。有价值可以用的的数据,统计知识等固然重要,算法也有他们值得深究的意义。
其实我倒觉得engineer这一类应该还有一个分支:就是做infrastructure 也很重要,分析要想能商用,效率也挺关键的.