数据的游戏:冰与火
我对数据挖掘和机器学习是新手,从去年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 ,请勿用于任何商业用途)
《数据的游戏:冰与火》的相关评论
我是新手啊,想学习数据挖掘
数据挖掘,看不太懂哎…没研究过,不过了解下挺好的
实例二第二点的“还有很能被我的程序”中的“很能”应该是“很难”的错别字吧……
谢谢!
这是一片蓝海
在数据挖掘当中,数据清洗和模型的建立确实是比算法的编写来得更重要,更困难。数据清洗得不好,算法和模型弄得再好结果也会不可靠,我之前就试过。另外,楼主可以留意下数据挖掘的国际比赛,那里的题目都挺有意思的~
读了博主的文章,很有感触! 最近在研究大数据这块儿,这篇文章给了不同的思考,数据的质量真的很重要! 数据的好坏,产生数据的最初设计模型都是十分重要的,分析数据是为了干什么,可行性,都是很重要的,其次才是 各种统计,哇据,分析算法,最后模型实现与应用。
跟千年虫一样,是个噱头
学点数学好~
第二篇可以叫做。。。。冰与火之歌 – 数据的纷争
大早上读片浩哥的文章,神清气爽。
对于毫无规律可言的,比如多人共用一号的用户,基本上所有分析方法都得失效吧?
呃……想吐槽一下..
这就是一个码农学了些数据分析的知识写的吧
是的,我就是一个初学者。不妨谈谈你的想法?!先谢了。
去年年底换了个工作 做某省电信的经营分析系统 该系统就是浩哥所说的情况 只有是个高级点的统计系统而已
只能说耗子叔是真正的去干过这个事情,并且亲身尝试过这个事情,才能有这类型的感悟。大多数的数据挖掘纯粹是因为要数据挖掘而进行数据挖掘,并无太多实在目的。
我觉得数据的质量和数量之辩和我做的感觉不大一样。
有人说,当他的钱达到一定的数量的时候,有多少钱只是一个数字而已了。
这个数量是个阈值,低于这个,钱的多少影响生活方式,高于这个的,钱变成了“不是问题”
数据也是一样、
如果数据非常规整,少量的训练数据就可以弄出结果来,而随着数据中噪音的增加(实际上,我还没见过经过人手处理的数据中,有没有大量噪音的),阈值在不断提高。直到有些数据噪音掩盖了一切,这个数据基本洗不出来了。。
但数据噪音在有限的时候,数据量还是有意义的,我们若得到“大于等于阈值”数量的数据,数据量的多少不再会对训练效果起作用,但小于这个阈值的时候,数据量总是“越多愈好”
如果“这个世界还是好人多”,这些噪音大多是能排掉的
反之这个数据就完蛋了
@陈陈陈
那非码农的角度又是神马呢?
浩哥关于推荐系统的陈述感觉是站在了有独立思考意思的人的立场上看的,这类人群比较追求新鲜而有深度不从众的东西,需要作为一个群里独立开发推荐系统。不过我觉得共性化算法和个性化算法对于很多大众来说仍然是适用了。很多个人喜欢的东西就是自己几十年养成的习惯,我认识一些母亲40时多了就看看言情家庭小说,你给她推荐其他小说就不合适了;至于共性化推荐所说的推荐流行的东西,也是可以理解的,就像你去服装市场,老板也会推荐流行的款式。流行款式穿的人多了,自然有新的流行款式出现,这时候你就需要更新算法推荐新的流行东西。
当然我的这些想法只是结合个人的生活经历,没有数据来证明。欢迎大家吐槽
好文
Data Analyzer 苦逼得飘过
好文。。不错
我作为java开发者客串了一段时间的数据挖掘,其实只是根据算法去实现M/R过程而已。这段时间最深的感觉就是对数据不敏感,看到一串数据不会去联想,不会带到业务的常经理。如果没有这个敏感性,做起来很郁闷。
这篇很不错。
“但是地于服装这样的叫Soft Line的产品”应该是“对于”吧?
Scientist 国内有啊,我身边就有(原SPSS,现在的IBM BA),整体水平和国外比是有很大差距,不过不能说没有吧。你说的数据质量很重要,不过大数据也不完全是噱头,试想一个私房菜和麦当劳这种国际连锁店相比,虽然都是做餐饮的,但是路子大不一样。大数据在清洗,训练和存储等方面都有很多不同。
尽管有很多标榜自己拥有“个性化”技术的推荐算法,但我依然认为数据挖掘终究不过是一个“平均”Trick,要么是通过大量与你相似人预测你的行为,要么是从你的大量历史行为预测你将来的行为。至于数据的“大”与“小”对模型的影响在于,如果数据量足够大,根本不需要任何机器学习算法,简单的统计就能给出较好的结果;可惜如你所述,“干净”的数据只是小部分的,这时候算法则是必要的提升效果的手段——永远不要假设我们可以清洗干净数据的所有脏点——但是显然,数据量越大,越能使”平均”有说服力。顺带,中国有没有Research Scientist我不知道,不过我觉得这个槽点不应该出现在一个初学者对数据挖掘心得的文章中。
好文,不过之分析一些网站的数据
淘宝的地址还不准确?那用户怎么收货?
有些地方说的有道理,毋庸置疑数据的质量很重要,但是机器学习的方法也很主要,做数据挖掘的人很多,国内做的牛的你觉得有几个人,你看不上文中提到的kmeans,随机森林等算法,试问一下你到目前为止你从头到尾全部都实现了目前主流的机器学习算法了吗(可以任选一种语言),不要告诉我这些算法都很成熟商业和开源里的都有,为什么要实现,若是,改变下自己的认知吧,才10个月就敢瞎写些文章出来,你不怕误导小于等于10个月的人吗
同样也是搞数据挖掘和机器学习的的新手,倒腾有半年了,个人总结难点在于:
1. 数学建模
2. 选择适合模型的样本
大多搞数据挖掘和机器学习的人只能也参考已有成熟模型,使用一堆非常大却没有价值的数据,来做实现。其实这个和@陈浩所谓的三种角色非常吻合,而我现在也只能是研究成熟的数据模型,努力挖掘有价值的数据,并一定做好实现,必须得承认这个事实。
我是半路出家的(饭还是有的吃,无非是想让自己碗里的菜比大多人的好点),还没有那种能力解决上面2个问题,但会努力着,如果终了也没有玩过数学建模,也没什么遗憾。
数据挖掘 不懂,但是从文章中发现, 某些场景和窘境,在 “用户体验”“美工设计” 多少有些相似。
lz需要搞清楚什么是数据,什么是信息,这些都是有相对确定的定义的。
并不是说定义就是真理,但是定义可以让大家的交流有一个相对一致的基础。
此外,lz觉得推荐是按不同维度的排序,我倒是觉得各种推荐都是某种意义上的分类。
最后,数据的好坏很重要,但是数据的大小也很重要,至少在再抽样和交叉验证时影响很大
数据格式标准化是基础。标准化的后台接口数据有利于后台的分析和筛选,标准化的用户接口数据有利于让用户形成阅读习惯。
感觉数学建模这玩意有点不靠谱,每回都感觉,跟实际值会偏差好大啊。
数据的表示也很重要,比如一篇文章特征的提取这个对结果的影响也是很大的
忽然间发现皓哥原来到聚石塔去了,不在amazon了哦
”而像什么K-Means,K Nearest Neighbor,或是别的什么贝叶斯、回归、决策树、随机森林等这些玩法,都很成熟了,而且又不是人工智能,说白了,这些算法在机器学习和数据挖掘中,就像Quick Sort之类的算法在软件设计中基本没什么技术含量“
楼主,很遗憾在你的文章里看到这段话,其实整篇文章都还算有见地,但这段话真的显得非常非常无知和草率。可以看出你对于数据挖掘技术没有深入的研究(哪怕学习)过,还停留在”拿来用“的阶段。数据挖掘,就其整体而言,是一门年轻的科学,你所说的那些算法本身就还有很多值得开拓的领域,更不要说你还不知道的算法。其实这一部分的是可以归属于你所说的”Research Scientist“的工作范畴,而不是”software developer“。多研究研究数据挖掘算法吧,它值得你去思考,而不仅仅是用
没错,你说得是对的,我很浅薄,理解万岁。
第一次看了你的文章后回复。再次拜服耗子哥!
其中 几个观点 太赞同了!
1.,“我看到很多的玩大数据的,基本上干的是数据统计的事”
— 我看到的也是, 并且自己这2年做的工作也有一部分是这个。
2.“业务场景越窄越好”
— 前两年做了段时间推荐系统相关工作,做了几个版本的推荐系统,基于协同过滤算法,先是一个泛泛推荐POI的版本,而后面的版本缩小范围到餐馆推荐。当时自己的感觉真的就是“业务场景越窄越好”!
3. 关于算法
— 个人对这些算法不怎么感兴趣,但是出于工作的原因,也有一点肤浅了解吧。这些算法确实比较成熟,很多有现成的代码,包括分布式实现(mahout)。初期还是以学习为主,看懂代码,结合实际业务改改调调。 没有好的数据,感觉要做出真正的效果,挺难(个人感觉)。
很遗憾,做的是最没技术含量的工作,可是有时候能看懂别人的模型就不错了,实现有时候也不是很容易,观点有点偏激啊;
就我看到的而言,我也基本分不清“数据挖掘”跟“数据统计”之间的区别…… 把各种数据汇总然后按维度分个类,产生不同的view,这到底意义在哪里呢……
看到第一句,笑得很开心 :-)
好文,好文,必须赞一个先。
在这个领域才不到一年的经验就有如此深的见地,真让俺这等在这个行业里混了七年之久的我佩服得五体投地。
记得小时候看过一篇科幻小说叫“霜与火”,不知楼主有没有看过,非常经典。
勘误提醒:还有很能被我的程序所识别出来的。比如:“宇宙路地球小区”之类的。
”很能“ –》”很难“
@ammon
是用户,会输入各种奇葩地址,不论输入框应该填什么,只填我认为对的,收不到还赖商家
撒大厦的撒萨达阿斯顿
模型不对,再大再准的数据都只是个屁!
同样得到 某岛住民都不穿鞋 的数据信息了
a认为 既然他们都不穿鞋,自然也不可能对他们销售鞋了
b认为 现在他们都没鞋穿,自然可以大量销售鞋子了
赞!
恩,数据质量确实是非常重要的。前阵子我工作中也遇到了博主的大量地址规范化问题,呵呵,把我折腾的半死啊。我们的数据大概七千多万,也如同你所指的问题,一模一样,后来我偷了个懒,google place api正向反向了一下,倒是基本率了个百分之七十左右的正确率。具体问题,可以参考。当然了,像查无此地址,还是没有想出好办法。
讲用户需求预测那段,“但是地于服装这样的叫Soft Line的产品……”这句话的“地于”应该是“对于”。