Categories
Uncategorized 事儿关经济

R会议小记

今年的R会又热热闹闹的开了两天,一切进行的还算顺利,没有大的波折。大家玩的很开心,各种旧友重逢相见恨晚按下不表。只说几点我的体会:

1. 数据挖掘越来越热,却越来越觉得泡沫。今年R会议创纪录的收到了接近500人报名,实际到场领取材料350人。会场一直有人需要站着听,这是以前没有的。R这两年越来越热,说明业界的需求上来了,用R的人越来越多毕业了,进入企业了。然而听了很多演讲,却没有感觉有让人“惊喜”。大家在重复的炒有限的东西。不见新意。

2. 工具越来越热,只能说明用的人越来越多,而不见得是用法越来越聪明。大数据热的一塌糊涂,大家关注的却只是怎么能实现计算,而少有从根本思想的角度提出创造性的方法的。这让人不免觉得疲惫。

3. 林大师兄说的有句话让我印象深刻——用复杂的方法解决复杂的问题那是做研究,用简单的方法解决复杂的问题是在业界。一路看来,被业界认可的方法,大都是simple and elegant的,只可惜翻来覆去就那些,看久了就审美疲劳了。

4. 大多数分析只能说是typical的完成任务,有灵性的分析不多。张翔的“短文本分类实践”在这个意义下,是可圈可点的有灵性的分析之一。在现有的算法上,如何聪明的排列组合优化改造,这不仅仅考验的是分析者对于模型的理解,更多是对于业务需求的洞见。再好的模型,也得多少按需定制一下,否则总让人觉得空洞无物。

5. 机器学习是小聪明而不是大智慧。我这么说坐等被骂,不过确实是思喆大哥的一句点评醍醐灌顶——机器学习的人从来不关心假设检验,尤其是对于分布的假设。反正计算机可以算,那么就去算好了。很多算法直觉上过得去,就可以了。我总感觉这东西,要么大家玩够了破灭一下,要么有人从头建造一些夯实的基础,真正繁荣。现在还是一个初生牛犊的混沌阶段吧。比较好的应用,除了google发起的那几类,大概也很难有本质上的突破了。

6. 业界是 short sighted,这个不用多说了。

7. 我对整个数据分析的行业未来持负面预测。有泡沫的感觉。可是,明明自己还在混这口饭吃...不过至少这口饭还能吃个十年二十年吧,不怕不怕。

8. 以前总觉得建模什么的最重要,最刺激,最有成就感。现在感觉,其实很多时候解决问题的能力大家都有,而发现问题却不是每个人都擅长。也劝最近打算从学校里面出来的朋友们,不要一上来就跟招人的企业说“我希望做统计建模”blablabla...其实有的时候那些fancy的模型提高的可能只是最后的5%,而为此牺牲的效率有可能有着更高的成本。至少我现在,有点越来越问题导向了。还有,其实很多时候,在学校里大家对于模型的理解还都是很肤浅的,纸上谈兵的。其实自己根本把握不住那些东西。最近好多次深深感觉,我以前觉得自己熟练把握的很多模型都不见得可以迅速的应用到实际的业务场景中去。在不断的跟同事、老板、partner讨论的过程中,才是真正的去深入的理解那些模型的过程。所以,一句聊以自勉的话:还是从简单的做起吧。

几乎没说几句好话,见谅。好玩的东西就是那么多,天天玩天天看不免觉得疲惫。不过平心而论(与我的工作单位无关),eBay对于数据的理解和应用整体水平绝对是行业前列的。能把一个数据分析的大问题break down到若干几乎独立的小问题,这就说明整体的框架已经成熟并足以支撑业务了。这样的情况下,作为个人可能接触的好玩的事情会越来越少,因为几乎相似背景的人都可以很快的胜任日常的工作(这也是我对大企业最佩服的一方面,分工确实细致,有利于提高整体效率),另一方面也是学习如何化整为零的好去处。每个人都有自己想要的人生,都会选择适合自己的地方。只是这一次很多人一致评价,觉得我来了eBay之后更快乐了——这怕是最好的褒奖了吧。

----对于未来R会议的期许-----

我们号称要做“学术会议里面最文艺的,文艺里面最学术的”,那么总要多多的有些有灵性的分析。R语言基础培训可以淡出R会议的舞台了。

此外,力争联系更多的大牛~要有学术会议范儿嘛 ^_^

Categories
事儿关经济

中文文本聚类小尝试(Text Clustering in R)

众所周知的,我会经常百无聊赖的玩一些比较好玩的东西。比如画画旅行地图啦,恶搞一下COS的版猪啦,抓抓新浪围脖啦。这不R大会又要开始了么,有一点点小数据也要玩玩啦。比如,呃,君不见周六上午三场演讲都是文本挖掘的,那我不研究一下文本挖掘怎么去混演讲听啊~自己动手先。

A nearby galaxy cluster about 65 million light years from Earth.
文本挖掘自然也有有个情景嘛。这不正好会议要排日程表嘛,那得把我们16个讲座分成四个半天,每天大约4场。这个应该怎么分呢?从直觉上来说,听众肯定是希望相关的话题放在相邻的时间,这样他们就可以选择自己感兴趣的时间段去听啦,不用在那里一坐两天。同时也便于之后的集中讨论嘛。于是这个目的就是:根据演讲的题目、摘要和关键字,进行聚类。这显然是一个无监督的学习嘛,我又没有一个特定的结果变量。

那么首先,自然是要对中文文本进行分词啦。这个嘛就可以偷个懒,直接用现成的R包rmmseg4j。(中间鼓捣若干编码问题,不赘述...)

然后就是聚类。这里继续偷懒,调用现成的文本处理包tm,可以直接生成文本词对应的矩阵。比如,一个编号为1的句子是 “我 在 中国”,编号为2的句子是“我 爱 中国” 那么生成的矩阵就是:

句子 我 在 中国 爱

1 1 1 1 0

2 1 0 1 1

就是说,把每个词都作为一个变量,然后统计它在每个句子出现的次数作为变量值。这样一来,如果总共有10个句子,有不重复的100个词,那么就会给出一个10×100的矩阵了。

有了这个矩阵之后,我们就相当于知道了每个个体的观测特征,那么就可以聚类了。比较简单的,可以直接算余弦相似度(比如google识别相似新闻的做法);也可以调用kmeans聚类。这里我们的摘要直接不会有特别多的相似,所以余弦相似度的区分度可能会不好。那么就先试试kmeans吧。

到这里,代码如下:

#读数据
library(xlsx)

presentations <- read.xlsx("r-presentations.xlsx", sheetName="Sheet1") #读excel数据

summary(presentations)

presentations$Title <- as.character(presentations$Title) #转文本

Encoding(presentations$Title) <- "UTF-8" #转换编码

presentations$Title

presentations$Abstract <- as.character(presentations$Abstract)

Encoding(presentations$Abstract) <- "UTF-8"

presentations$Abstract

presentations$KeyWords <- as.character(presentations$KeyWords)

Encoding(presentations$KeyWords) <- "UTF-8"

#分词

library("rmmseg4j")

presentations$raw_word <-with(presentations,paste0(KeyWords,Abstract, sep=";")) #连接所有标题、摘要、关键字

presentations$raw_word <- with(presentations, str_replace_all(raw_word, "R","")) #去掉r

presentations$seg <- mmseg4j(presentations$raw_word) #分词

#kmeans聚类

library("tm")

presebtation_seg <- Corpus(DataframeSource(presentations[,c("Title","seg")])) #转换到tm专用格式

presebtation_term <- TermDocumentMatrix(presebtation_seg, control = list(stopwords = TRUE)) #生成词频矩阵

presebtation_term <- t(as.matrix(presebtation_term)) #转换为matrix并转置

summary(presebtation_term)

presebtation_kmeans <- kmeans(presebtation_term, 7) #kmeans聚为7类

为什么我会在kmeans里面聚成7类呢?理论上只是要聚4类嘛。可是直接聚四类的话,区分度没那么好,一半多的演讲都聚到一类去了,没法安排嘛~所以只能增加聚类的个数,看看到时候再把小类合并。

聚成7类的结果如下:

Title cluster_result
R语言在eBay搜索引擎反馈与测试中的应用 1
营销分析模型及其在广告界的应用 2
系统生物学和转换医学中的R语言 + R in Systems Biology and Translational Medicine 3
R/Bioconductor在生物多维组学数据整合中的应用 3
R Case Study from EBAY APD 4
网络用户浏览路径分析 4
啤酒与尿布的当代版--商品分析在电子商务中的应用 4
基于RHadoop的关联规则挖掘 5
模型预测的利器——随机森林 5
基于R的地理信息系统 (R-based GIS) 6
R语言和其他计算机语言的混合编程 6
ggplot和knitr包简介 6
R与面向对象统计分析 6
twitteR包入门和应用 6
短文本分类器与电商品类数据挖掘 7
R语言环境下的文本挖掘 7

比较理想的是,聚类之后识别出来了两个文本挖掘的演讲...还有一堆R包的演讲。但是还是没法安排演讲嘛。看到这里,大家有没有发现,这样做最大的问题就是,聚类的时候把一些没有实际意义的虚词也聚类进来了,比如“的”;还有一些几乎所有演讲都会涉及的词,比如“R”和“分析”。这些词在其中是没有意义的,也会影响我们算dissimilarity的结果——这到底是按内容聚类啊,还是按作者的行文风格聚类啊?此外,虽然我们规定演讲摘要大都在100-200字,但还是有长有短,到目前我还没有对文本的出现频率用语句长度来加权...这也是不科学的嘛。那些原来在Google搜搜里面排名作弊的,不就是同样的内容复制10几次,来提高关键词出现频数(而不是频率)嘛。

为了解决这些问题,首先就是要去掉没有意义的虚词。这个不算太麻烦,把一些常用的虚词和转折词连接词之类去掉就可以了。其次,要去掉每个演讲都有的词。这里虽然可以一个个去看,不过简单一点,我们先统计一下词频嘛:

#高频词统计

presentations$seg2 <- unique((strsplit(presentations$seg,split=" "))) #断词

all_key_words <- iconv(unlist(presentations$seg2), from="UTF-8", to="GBK") #转换到GBK编码

all_key_words_fre <- as.data.frame(table(all_key_words)) #统计词频

names(all_key_words_fre)

all_key_words_fre <- arrange(all_key_words_fre,desc(Freq)) #按词频排序

all_key_words_fre[1:20,]$all_key_words #100个高频词

然后看一下TOP 20高频词:

1 的 105

2 数据 27

3 分析 24

4 和 21

5 图 18

6 在 17

7 挖掘 15

8 用户 15

9 应用 14

10 分类 13

11 了 13

12 语言 13

13 介绍 11

14 是 11

15 文本 11

16 试验 10

17 平台 9

18 ebay 9

19 案例 8

20 模型 8

所以看来,“挖掘”,“用户”,“文本”,“试验”,“平台”,“ebay”,“案例”,“模型”等等还是比较有区分度的词。按照这个思路,选择有限的几十个词重新分类,效果可能会有所改善。

此外,鉴于样本量不大(16个),所以可以人工的去看每个简介,手动标注tag作为聚类的变量。事实上,最后我还是这么做了一下,来在上述原始聚类结果上进行了一下重新的分组处理,形成了4大类。但是这个东西也不完全是可以直接用的,总要考虑时间之类的其他因素。最终的结果更多是人工思考的排序,估计李舰哥在确定顺序的时候更多的是按照经验和以往R会议的风俗。算法虽然好玩,但毕竟捕捉的还是人的思维模式,暂时没办法完美的取代吧。不过其实也差的不远呢。

最终人工结果:

冯兴东:R语言和其他计算机语言的混合编程

刘思喆:R语言环境下的文本挖掘

张翔:短文本分类器与电商品类数据挖掘

沈羽、周春英:R语言在eBay搜索引擎反馈与测试中的应用

周扬:基于R的地理信息系统

肖凯:twitteR包入门和应用

陈钢:系统生物学和转换医学中的R语言

杭兴宜:R / Bioconductor在生物多维组学数据整合中的应用

陈逸波:基于RHadoop的关联规则挖掘

李忠:R Case Study from EBAY APD

洪健飞:啤酒与尿布的当代版——商品分析在电子商务中的应用

廖明:营销分析模型及其在广告界的应用

肖嘉敏:网络用户浏览路径分析

刘成昊:模型预测的利器——随机森林

王雨晨:R与面向对象统计分析

魏太云:R基础作图与可重复研究

纯属好玩而已~不过R会议也举行了整整五届了,每次15个演讲的话也有15*9=135个演讲了。在这个样本量下,如果我们要出个论文集什么的,倒是可以直接用聚类的办法划分chapter了...嘻嘻。

Categories
读书有感

略读「数学之美」

继前段时间匆匆瞄过「浪潮之巅」后,注意到最近作者又出了另一本书,「数学之美」,便寻思着一定要有时间读一下。搜了一下才发现原来早在06-07年,这些就在google黑板报上连载了。唉,当年是有多么的孤陋寡闻,才会浑然不知--说不定那年要是看到了,就会直接投奔CS去了,自此和econ无缘了。哈哈,时间不能倒流,玩笑而已。

google黑板报上的版本不长,昨天从杭州回来的高铁上匆匆便略读完了。从自然语言处理,到输入法,到语音识别,到排名算法,到anti-spam;从隐性马尔科夫模型,到贝叶斯网络,到pagerank,到"简单而有效"的必杀刃...算法的魅力在作者笔下翩然而现,不禁勾起了我心底的贪婪。看到优雅的条件概率公式,恩,世界被数学描述的真的是挺美好的。

不知道为什么,接触了很多CS出身的出色的工程师们,一边惊叹于他们卓越的coding能力和创造、组合工具的能力,另一边却又不知为什么总隐约觉得他们的统计学背景并不是那么的solid-换言之,统计分析的sense远远比不上熟练应用算法的能力。虽说术业有专攻,可是算法这么迷人的东西...好吧,我总是对于美好的事物,不由自主的表现出贪婪和心向往之。

看看接下来的一段时间,如果确实无聊,可以考虑静下心来学一段时间的算法,很多算法模型都是知道个大概却没有那么确切,心里也难免惶惶不可终日。有的时候确实是眼高手低了,好多东西都没有深深地挖掘过。浅尝辄止不是一件好事恩,还是自己推导出来的东西更能铭记于心。

话说,明天的R会议,我会发挥娱乐大众的功用,讲一些统计分析好玩的应用。基本是上次给松鼠会讲的「别让数字吓到你」的升级版,加入了一些稍稍高级的分析方法,然后案例也有增有减。为了吸引观众,我只能无情的拿cos开刀,有一些关于cos的内幕会被无情的曝光,还有依照惯例现场观众会被调戏--嘻嘻,不调戏你们一番你们怎么能记得住呢?这才不枉我又花钱又花时间跑到北京来一趟嘛。希望明天我的状态会比较好吧,喵~

Categories
我的生活状态

充实的一周、R会议小报

刚刚结束的一周大概是最近最充实的一周了,几乎每天都在外面跑——去杭州就不用说了,周五更是一天之内横穿了上海两次+,各种高铁地铁磁悬浮、公(交)车私(家)车出租车……真的是为上海的经济发展和碳排放量增加做出了杰出贡献啊!同样的,肯定睡眠不足,终于知道每天都是最终脑子不转了躺在床上立马入睡的感觉,居然被看出来面色憔悴……嗯,我还是喜欢解释为一种挑战极限的充实感。前一周,我被养的太舒服了,果然,这周就必然的加倍还回去。

忙碌的最主要原因就是今天刚刚落下帷幕的第四届中国R语言会议(上海会场)。正如前几日发出来的[cref %e7%ac%ac%e5%9b%9b%e5%b1%8ar%e8%af%ad%e8%a8%80%e4%bc%9a%e8%ae%ae%e4%b8%8a%e6%b5%b7%e4%bc%9a%e5%9c%ba%e9%80%9a%e7%9f%a5%ef%bc%88%e9%99%84%e6%bc%94%e8%ae%b2%e5%88%97%e8%a1%a8%ef%bc%89 上海会场演讲列表],见到了很多朋友,老朋友新朋友,各种兴奋!很多人都是自从09年第二届R会议之后就没有见过了。想念已久啊!

终于也体会到办会议的辛苦,很多细节的事儿都需要考虑到,比如最后还是忘记了很多人要的邀请信……汗,如果谁需要的话给我留个言或者发个email,我们会发扫描件补上、或者快递原件的。这个真的是抱歉了。

学术界的话,谢邦昌老师、超级长的VGAM包的作者Thomas Yee、周涛教授,当然还有汤老师的一如既往的支持,都是让我们特别感动的。此外,赵明和钟春燕带来的在基因富集分析和肿瘤生存预测中的应用也让人印象深刻。

COS自己人就不用废话什么了,一群干将北京杀过来镇场子,金融的数据挖掘的,还有“熹云轩”强大的可视化(这个,云被涛代了,果然有“奸情”啊)。

业界的,自然淘宝和茂源资本的加入让我们格外开心,也要感谢土豆、茂源和芒果的赞助~要不我们不可能把这次会议办的这么红红火火气势昂然的。资深潜水员牟官迅和资深开发者邵凡的报告都让我们一下子站到了数据分析的最前沿。

其他的各种感动就不再一一列举了,我是抽空还打了个酱油折磨了大家耳膜20分钟,罪过啊。slides还是厚脸皮传上来先,很快搜集齐了大家的slides都会一并放在COS主站的。

slides_network_experiments_R

Categories
事儿关经济

Academic Day

昨天从杭州回来,顿时感到如释重负,事情做完了,自然心里舒畅一些。

然后,今天列了列这周需要做的事情,终于没有什么说是要几点几点必须做完的了。然后长吁一口气,想起来需要改的paper。其实论文这东西,写不写纯属一种对于学术偏执的热情。我还是很喜欢看到一点点contribution to existing literature的,先不管这个contribution有多大。于是写起来,也便多了几分感觉。顿时感慨,大多是时候做事情的热情真的只是单纯的来源于喜欢和责任感啊——尤其是后者,若不是责任感在那里,真的感觉很多事情都没有必要做。与此同时,发觉自己的完美主义倾向越来越严重,不喜欢把一个不负责任的东西交给别人,那样怎么对得起放在第二行的自己的名字呢?虽然很多时候也没有放自己的名字在那里了……

今天,除了接接电话之外,定位于一个academic day,更多的是指让自己的思维回归学术化一点,用经济的角度重新审视过去几周的事情,再就是准备一下接下来的两个conference。

话说,这次R会议要讲的题目终于定下来了, Experiments in Social Networks and Analysis in R,有点绕口是不是?中文更绕口,我都不知道怎么翻译好了。田野实验的方法在实证研究中的应用越来越广,而随机实验的方法尤其对社会网络这种本来内生性问题很严重的领域提供了一个寻找一些答案的方法。今年上半年的时候前后在这个基础上做了一个实验设计、还有后续的一篇更完整的论文,现在又开始真正的run一些实验,所以觉得这个题目至少有一点话可说。只是不知道多少人会感兴趣了。话说,我应该先把《社会实验的特殊性》一系列感想文章一点点写出来,果然实践出真知啊。

R会议上海会场在一点点前进,不时看着慢慢变长的报名列表心里就有一种莫名其妙的幸福感 ^_^ 能见到很多志同道合的人自然是一件格外开心的事情。现在真的是每天都离不开R了,各种该用R的、其实并不一定非用R的事儿都交给R来处理了,工具依赖啊。发现RStudio这个“编辑器”很好用,很好用……然后又在下Revolutoin了,不知道会不会有新的惊喜。

还有很多东西值得一点点期待吧。心情有张、有落也算正常,不过总体上还是一种满积极的状态,毕竟没有白来的丰收,相信今日的辛苦付出都是会换来在未来的某个时刻回眸时的会心一笑。算作一种小小的希望吧。