Categories
事儿关经济

安逸的富二代

听着听着音乐,突然间想起一个人,索性捉起笔来,描绘一番。

想说的这个人是我曾经的一个客户,那还是那个上海温暖的象夏天的秋天,也是那个出差跑到陕北冰冻的象冬天的秋天。那是第一次去到陕西榆林的客户那里,第一次自然什么都不顺利,客户基本不怎么搭理我们,一副给你们个机会来办公室喝杯热茶就不错了的姿态。那个时候,可谓见识透了做市场的人的嘴脸变化之快,小心翼翼的陪着笑脸,生怕自己说错了什么被人拿住当作了把柄。事后,还在那里费尽心思的揣摩客户的心思,不知道为什么上午的太阳说变就变成了下午的阴云。天晓得那个时候对我的心理是一种多么大的折磨和考验,职场的水深自那时开始体会...我们那时的客户都是国企,里面明争暗斗派系不断,搞不好就是人为刀俎我为鱼肉,搞不好人家来笑嘻嘻的啃了你都不知道...

只是在那众多的客户中,有那么一个不同寻常的客户。他第一次见我们,特别不友好,是那种放在表面上的不友好。我心里一悸,不知道会不会下一秒就被毫不客气的扫地出门了,心里顿时生出了若干委屈,而奇怪的是那是我居然控制住了内心的万千波澜,还在那里堆满了笑容小心翼翼的询问着一些不得不问的问题。

估且称呼这个客户为度总吧。度总年纪不大,又是技术部门的领导,自然充满了技术范儿。度总是榆林当地人,西北汉子的性格爽朗的很,在这么一个不知道隔壁是不是就藏着暗箭的地儿,也是直来直去的,喜欢就是喜欢,不喜欢就是不喜欢,不加掩饰。也是这一点,让我后来越来越好生感激—其实很多时候这些部门的领导也是只能奉上面领导的指示行事的,有的时候跟你山路十八弯也只是一些不能做的事儿,绕来绕去的,害得我们只能不断的猜度,好生费力。度总则不会跟你浪费时间,说什么就是什么,爽快的很。

隔了一段时间,再去榆林,又见度总。这次上面大概是点头了,所以一路下来我们就只是操作一些具体事务。这个时候度总难得的,坐下来跟我们讨论技术的东西(我一直觉得做咨询尤其是纯乙方,两分技术,八分耐心与人交流),这些相比于人情那些我自然更熟络一些,所以聊起来倒也敞快。度总也是个数码玩具迷,当时正巧背着一个kindle还有一个ipad去了,就跟他相互鼓捣了好久这些玩意儿。还给我拷贝了一些音乐,这也是为什么突然听到这些音乐想起他来的缘故。

后来听说,度总开了一辆非常好的车来上班,大概仅次于他们老总。这显然不会是单位配的。联想到榆林那地儿暴发户甚多(煤炭发家),我们就揣测度总家里怕也是殷实的很。大致的人生轨迹无外乎是,上学,然后毕业家里找点关系塞进国企,舒舒服服的做个闲差头头,舒舒服服的过着小日子,买个几千块的耳机发发烧或者空运几罐普洱解解渴之类。一个三十出头的技术领导,低调而文艺的很~

这种富二代的人生,让人几乎无可指责和羡慕什么。极度的安逸,与世无争。可以喜欢什么玩弄什么,不喜欢就不理会,不用象我们乙方这样天塌下来也得陪着笑(这也是我为什么一度要离开乙方做甲方的推动力)。关键是,你不会觉得他无知,他傲气,你可以感受到他有自己喜欢的东西,只是不用像我们这样需要努力的养活自己而已。但不见得他不能养活自己,搞不好真正做起东西来比我们都要强得多。只是不需要吧。有种大隐隐于市的脱俗感。

不知道,若干年后有没有机会再去品品他沏的那壶温热的普洱,在那个寒冷的秋天唯一让我感到有所温存的普洱。在那个弱肉强食明枪暗箭的环境中,唯一让我敢放下心来细细品品茶的味道的普洱。

Categories
我的生活状态 读书有感

社会实验设计(一):应用回归模型常见的四个FAQs

有些东西,长时间不看不推导,难免就忘了。最近感觉不断的有人来问类似的问题,基本都是集中在实验设计阶段的(貌似很多时候学校里都不教大家怎么设计实验?只有设计好了才知道怎么评估嘛...)。索性趁着有点时间,复习一下计量经济学对付实验的一些方法。

其实已经不知道第多少次在落园说到社会实验的问题了,不过貌似都未曾从零开始系统的讲述过(其实有的时候基础的问题才是最大的问题)。还是乖乖的拿起「Mostly Harmless Econometrics」这本书和当年的笔记,乖乖的重新当一回虔诚的学徒...这本书是经济学家写的,所以例子大多是经典的经济学尤其是劳动经济学(Labor Economics)的例子。我会替换掉一些学术性比较强的例子,但是也会损失一些严格性,以保持直觉为第一要务。大家还请酌情依据自己的知识积累来有选择的吸收。

Mostly Harmless EconometricsMostly Harmless Econometrics

本文主要以读书笔记形式为主,但是会非常多的加入我个人的一些观点和点评。原文翻译部分会以引用形式标出。此外,发现读者们越来越喜欢“短平快”的东西了,我也只能试图把文字写的更加的深入浅出一点,笑点多一点...

p.s. 刚看到《机器学习那些事》这篇译文,想稍稍补充一下。计量经济学关注的不是预测,而是(统计上的)“因果推断”。所以衡量的标准什么的自然也有所不同,还请不要以预测的标准来看待下文。

-----------絮叨结束,笔记开始-----------

实证研究的四个FAQs

(废话一句,前段时间整理了一堆统计应用的问题,可惜现在不能发啊不能发,等答案来了一起发吧...) 做research的,大多会被四个问题所困扰:

1. 探究哪种程度的关系?

2. 理想的实验怎么设计?

3. 最佳的识别策略是什么?

4. 结果怎么解读?

这四个问题基本就是一项实证研究的四个步骤,找到一个自己感兴趣的问题,然后去找出一条路子回答它,再择选最优的数据分析策略,最后从数据回到直觉,来解读这些结果。这样,基本上从「直觉 -> 数据 -> 直觉」,一气呵成。前两天施老师一直在微博上感慨:

我觉的目前中国最奇缺的也不是数据分析师,也不是创造商业价值的想法。我觉得最缺的是独立思考和用事实与数据支持并表述自己想法的习惯和能力。

有点不谋而合的感觉。独立思考(直觉) -> 事实与数据 (数据) -> 支持并表述自己想法(直觉)。许多次,我在面试中被问及“为什么去学习那么多统计模型或者更直接的、为什么喜欢和数字打交道”的时候,总会说一句:

从数字中寻找直觉。

这句话从凯恩斯那里抄过来之后,一直被我奉若圭臬,不时拿出来提点自己一下也不错。说到底,我有点不是很喜欢数量分析模型的滥用,虽然现在已然是普遍现象...

一个一个来看。

第一个问题:为什么强调(统计上的)因果关系而不仅仅是相关关系?

无数次的回答过这个问题,尤其是在今年春天两次讲「别让数字吓到你」的时候...反例说过很多了,关键在于,我们一般观察到的相关性,为什么不能直接用于“政策设计”上的指导呢?套用一句经典的中文,相关性就是「知其然、而不知其所以然」。因此,大多数时候,能观测到的一些变量直接的相关性往往是在各种复杂的因素作用下自然形成的,你强行的去改变其中一个因素,往往不见得可以一并改变跟他高度相关的其他变量。比如,最近又在微博上看到一段经典的段子:

【每天睡8小时死得更快?睡多久才最健康】这项实验长达六年时间,由加州大学圣地亚哥药学院和美国癌症学会联手进行。研究发现每天仅睡6、7个小时的人,比每天睡超过8小时,或少于4小时的人死亡率要低很多。每天睡7小时的人死亡率最低,只睡5小时的人,这个系数也低于睡够8小时的人

还有一段类似的:

华尔街统计:每天睡4小时的人,年薪基本是400万以上。多睡1小时薪水就要除以4。比如说你每天睡5小时,你就只拿400万除以4=100万年薪。睡6小时,就只能拿最多25万了。每月挣5、6千的,一般都是每天需要睡七小时的…

我承认,从心理学的角度,这个段子或许有着极强的心理暗示作用,大家要勤劳要勤劳~但是,这东西最多看着欢乐一下而已,你改变自己的睡眠时间就能改变寿命和收入?呃,目测虽不是不可能,难度还是蛮大的...

第二个问题:哪些实验可以理想地捕捉到(统计上的)因果关系?

其实在这前面,还有一个问题需要大家的思考:为什么我们需要实验?实验经济学的方法这两年扩张的非常厉害,微观计量若是没有一个随机实验(或者准实验)为基础,那么几乎要被大家argue死掉了。业界也是,搞什么新的市场营销方法若没有个随机实验来证明一下,那么结果也基本没什么太高的可信度(业界俗称单因素实验为A/B Test,如果发现某人的LinkedIn 简历上有这个关键词,不要怀疑,她很有可能是做Marketing Analytics)。只能说,太多的时候各种经济因素的联系错综复杂,谁也没办法很好的disentangle 这些因素之间的脉络关系,所以有时候不得不借助对照实验的方法来“野蛮”且“轻巧”的回答一些因果关系(只要比一下就好嘛,多简单~)。从这个角度来看,实验不是万能的,也不是唯一的灵药,但却是Simple and Elegant的。

好吧,认可了做实验这种思路,你还要考虑是不是充裕的budget去做(实验肯定是有成本的哇,而且往往成本不低的),然后有没有“道德委员会”来判决你是不是人道呢?是的,有些实验肯定是不人道的,但是我会提前告诉你么?比如莫非你不知道,当别人拿到了100元的促销红包的时候你却连个邮件毛都没看到,只是因为你在营销人员的global control list里面,压根什么邮件都不会收到么?你问我凭什么?什么都不凭,要怪只能怪randomlization。或者一个更著名的例子:米尔格拉姆实验(Milgram experiment)

实验小组告诉参与者,他被随机挑选为担任“老师”,并拿到了一张“答案卷”。实验小组并向他说明隔壁被挑选为“学生”的参与者也拿到了一张“题目 卷”。但事实上两张纸都是“答案卷”,而所有真正的参与者都是担任“老师”。“老师”和“学生”分处不同房间,他们不能看到对方,但能隔着墙壁以声音互相 沟通。有一位参与者甚至被事先告知隔壁参与者患有心脏疾病

“老师”被给予一具据称从45伏特起跳的电击控 制器,控制器连结至一具发电机,并被告知这具控制器能使隔壁的“学生”受到电击。“老师”所取得的答案卷上列出了一些搭配好的单字,而“老师”的任务便是 教导隔壁的“学生”。老师会逐一朗读这些单字配对给学生听,朗读完毕后老师会开始考试,每个单字配对会念出四个单字选项让学生作答,学生会按下按钮以指出 正确答案。如果学生答对了,老师会继续测验其他单字。如果学生答错了,老师会对学生施以电击,每逢作答错误,电击的伏特数也会随之提升。

参与者将相信,学生每次作答错误会真的遭到电击,但事实上并没有真的进行电击。在隔壁房间里,由实验人员所假冒的学生打开录音机,录音机会搭配着发 电机的动作而播放预先录制的尖叫声,随着电击伏特数提升也会有更为惊人的尖叫声。当伏特数提升到一定程度后,假冒的学生会开始敲打墙壁,而在敲打墙壁数次 后则会开始抱怨他患有心脏疾病。接下来当伏特数继续提升一定程度后,学生将会突然保持沉默,停止作答、并停止尖叫和其他反应。

电压 “学生”的反应
75 V 嘟囔
120 V 痛叫
150 V 说,他想退出试验
200 V 大叫:“血管里的血都冻住了。”
300 V 拒绝回答问题
超过 330 V 静默

到这时许多参与者都表现出希望暂停实验以检查学生的状况。许多参与者在到达135伏特时暂停,并质疑这次实验的目的。一些人在获得了他们无须承担任何责任的保证后继续测验。一些人则在听到学生尖叫声时有点紧张地笑了出来。

若是参与者表示想要停止实验时,实验人员会依以下顺序这样子回复他:

  1. 请继续。
  2. 这个实验需要你继续进行,请继续。
  3. 你继续进行是必要的。
  4. 你没有选择,你必须继续。

如果经过四次回复的怂恿后,参与者仍然希望停止,那实验便会停止。否则,实验将继续进行,直到参与者施加的惩罚电流提升至最大的450伏特并持续三次后,实验才会停止。

你对实验结果怎么预测?(当然现在这个实验太知名了,你可能已经知道答案了)。一般说来,大家都不会觉得人们会这么残忍对吧?其实在进行实验之前,米尔格拉姆曾对他的心理学家同事们做了预测实验结果的测验,他们全都认为只有少数几个人—10分之1甚至是只有1%,会狠下心来继续惩罚直到最大伏特数。可是结果让很多人大跌眼镜:

在米尔格拉姆的第一次实验中,百分之65(40人中超过27人)的参与者都达到了最大的450伏特惩罚—尽管他们都表现出不太舒服;每个人都在伏特数到达某种程度时暂停并质疑这项实验,一些人甚至说他们想退回实验的报酬。没有参与者在到达300伏特之前坚持停止。后来米尔格拉姆自己以及许多全世界的心理学家也做了类似或有所差异的实验,但都得到了类似的结果。为了证实这项实验,也有许多更改了架构的实验产生。

马里兰大学巴尔的摩州立分校(University of Maryland Baltimore County)的Thomas Blass博士(也是米尔格拉姆的传记—《电醒全世界的人》的作者)在重复进行了多次实验后得出了整合分析(Meta-analysis)的结果,他发现无论实验的时间和地点,每次实验都有一定比率的参与者愿意施加致命的伏特数,约在61%至66%之间。

好吧我有点跑题了,只是想说其实在实验勾画的阶段,很多东西是可以展开丰富的想象的——你先假设所有问题都不是障碍,然后去想“怎么设计一个理想的实验呢?”,然后再去依据现实的障碍做一些调整(或者可行性评估)。

有句话叫做,“被广泛应用的一定都是有原因的”,所以业界最广泛应用的A/B test肯定也是最被认可(和易于实施)的。这一类实验很简单,只要随机的一分为二,一组什么都不做(或者采用传统做法),另一组采用新的做法,然后对比结果就可以了。可是,等等,有没有觉得,很多的时候我们并不能够这么简单的实现“新做法”?是啊,我可以一分为二的发邮件,但是如果我要研究的是类似于“不同殖民统治制度对于国家解放后发展的影响?”这种话题,难道我可以让时间倒回一二百年,重新命令所有的殖民者去随机划分殖民地,然后观察后续的国家发展?嗯,就算我可以穿越时间,那些殖民者也不会听我的随机划分地盘啊——凭什么随机啊,这些本来就都是老子抢来的,老子爱怎么折腾怎么折腾。我能苦口婆心的告诉他们,“这都是为了验证殖民统治对于经济发展的结果”么?他们会在意几百年后是不是有一篇惊世骇俗的经济学研究论文发表了么?来个眼中体(点击查看大图)

africa-econ

好了,恶搞够了...其实说到底,很多问题实验也是没法回答的(或者根本没法设计),这类问题我们称之为FUQ(fundamentally unidentified question, 基本上无法识别的问题)。比如,我们无法改变的还有人的性别、肤色等等(基因不是你想改,想改就能改~),不过聪明的办法是我们去改变“别人认为你是什么性别的”,比如虚构建立神马的。一个著名的例子是,2004年Bertrand and Mullainathan的paper就是虚构了简历中的肤色——改变应聘者的姓氏,然后其他工作经历等等基本一样,然后看招聘企业电面反应如何。这样的聪明的实验设计不禁让人拍手叫绝——真正起作用的到底是奥巴马黑黑的皮肤呢,还是他黑黑皮肤下面那颗白白的心呢?所谓黑白两道通吃,不外乎如此。

呃,还是认真一点,说一个本质上无法识别的问题(FUQ)吧。

比如,是不是让孩子晚上小学一点比较好?然后自然而然的,我们会想,这还不简单么?我随机找两群小孩,一群6岁,一群7岁,然后同一年入学。之后,比较他们的成绩就好了嘛。等等,你有没有觉得有什么不对的地方,这两群人本身就不一样哇。一般说来,7岁总比6岁的要更容易学习一点吧,这个搞不好是年龄因素,与入学时间其实并无关系呢。七岁的孩子无论是学一年级还是二年级的课程,应该都比六岁的孩子学得好。然后有人说了,那么就我们去看6岁上学的孩子二年级的成绩,然后比较7岁上学一年级的成绩不就好了,这样大家都是7岁呢。这不是更无语么,上了两年学的孩子肯定要多少优于只上了一年学的啊。总而言之,在这里我们没有办法区分开两种因素对于孩子的影响——是孩子年龄增长了了所以学习好呢,还是在学校的时间长所以学习好呢?如果我们真的要研究这个问题,那么显然考核的指标不应该是他们一年级的成绩,而是长大了之后比如说工作的薪酬等等。

所以说,我们一方面要让实验本身设计的精巧,另一方面也要避免去涉及FUQ类型的问题,要不就是真的自己跟自己过不去了。p.s. 另外请确保你没有漏掉什么实验过程中需要记录的变量值,要不就很痛苦了...

第三个问题:拿到实验数据以后,你的回归方程右边的X是哪些

先统一一下名词:计量经济学里面我们更常用identification strategy来称呼用于衡量因果关系的模型。换一句通俗而不怎么严格的话,这个identification strategy就是你怎么消灭回归方程右边的内生变量(endogenous variable)的。内生变量又是怎么定义的呢?简单而不严格的来说,我们一般希望了解的是X对于Y的因果效应,即X的变化导致了Y的变化,而不是Y导致了X,所以这里需要X是不受Y反过来影响的(即X的取值的决定与Y无关——比如一个学生分在测试组还是对照组是随机的,而不是根据他的身高或年龄)。如果X,Y本身就是相互影响的,那么我们的回归系数估计值反映的只是两者的相关性(correlation),而不是X对于Y的因果效应(casual effect)。有鉴于此,我们称合格的X为外生变量(在计量经济学的定义下)。

显然,如果是随机分组实验,且X的值代表是测试组还是对照组,那么这个X肯定是外生(给定);如果我们无法证实X是严格外生的,那么就需要利用工具变量等办法来寻找和X相关但是和Y不相关的其他外生变量来完成因果效用估计,这就是计量经济学里面常说的“工具变量法”(Instrument Variable Model)。

一般说来,我们有如下几种情形:

  • 随机分组实验:那么可以直接把分组变量作为X,估计出来的即为因果效应。这也就是最常见的A/B test或者multivariate test,只要保证分组是随机的。
  • 自然实验:有的时候我们没法人为设计并实践实验,那么就可以借助自然界的一些外部冲击。比如,在一篇著名的论文里面,他们利用相邻的两个州之间的最低工资政策变化,研究了快餐行业就业率的影响。其实idea满简单的,就是两个州本来就业率什么的差不多,然后一个州突然提升了最低工资(类似于一个自然实验),所以去看快餐业的服务员就业情况变化就可以了(有点difference in difference的味道)。还有利用地震、原子弹什么的研究经济发展的...参见:

    Card, David, and Alan B. Krueger. Minimum wages and employment: A case study of the fast food industry in New Jersey and Pennsylvania. No. w4509. National Bureau of Economic Research, 1993.和

    Card, David, and Alan B. Krueger. "Minimum wages and employment: a case study of the fast-food industry in New Jersey and Pennsylvania: reply." The American Economic Review 90, no. 5 (2000): 1397-1420.不过很多时候,自然实验还是需要借助工具变量的,如果我们想测量的X始终还是有些内生性考量的。这个后面详述。

  • 有条件的分组实验:这个就不是完全的随机分组实验了,有的时候我们会设一些条件,比如人均收入多少才可以申请xx补助,这样的话人均收入就成为了能不能享受政策的条件。对于这种分组实验,因为离条件很近的那些人其实也没差多少,我们假设一下连续性什么的,就可以对比他们的反应来做一些因果推断了。到时候采用的策略就是 regression discontinuity design, 即我们常说的RDD。

最后一个问题:你的统计推断模型是什么样子的?

这个问题更多的是具体问题具体分析与上述策略的结合:你需要研究的是哪些总体,什么样的样本,有什么样的一些假设?然后就是更多统计模型的问题了,比如,你是要用一般的OLS呢,还是需要robust regression(比如clustered stand errors),还是logit regression之类的。有句蛮好玩的话抄一下:

T-stat looks too good

Try clustered standard errors --

Significance gone

也好残忍是不是?至于什么时候需要用clustered standard error,后面会详细的解释。总而言之呢,随机分组实验是我们的一个benchmark,如果做不到就需要各种各样的修正方法,所以也还是蛮有挑战性的事情呢。不过我还真没在业界看到过robust regression呢...

--------------第一篇引论结束----------

另注:本连载系列可能会不定期更新,因为确实有些地方会稍稍深一些,我也得回头复习一下那些论文...只能说,这个和以往的所有偏technical的笔记都不一样,没有速成之道,只有一个个案例仔仔细细的研究下去,才可以得到一个比较全面的对于统计因果推断策略的概念。我会努力的认真的写,争取尽量少的犯学术错误...

Categories
日常应用

各种被Teradata摧残的应付招数:SAS,R,文本文件导入导出

这篇文章基本上就是我被Teradata折腾的辛酸血泪史...TD有TD的长处,但是还不足以应付所有的分析任务。所以不得不面对各种把数据折腾出来折腾出去的任务...(好吧我还没开始被Hadoop虐呢,到时候务必又是一番惨死景象)。

Teradata文本导入导出

Teradata SQL Assistance直接输入输出

这个适用于本地安装了Teradata SQL Assistance的windows系统,然后我个人的建议是不要下载多于10w行的数据,要不会很烦。也不要上传多于1w行的数据,要teradata-export-csv不会更烦。

导出文本(csv)比较简单,直接选定 File->Export Result就可以了,然后任何运行SQL的输出都会输出到文本文件里面,主要就是 SELECT 出来的结果。

这个时候,TD会有提示"Future results will be Exported to a file"。

teradata-export-csv-2

类似的,可以选择File->Import Data来读入数据,这个时候会让你选择一个现成的文本(csv)文件,然后告诉TD怎么读就可以了。

举个例子,比如我们有一些邮政编码和城市名称的数据,格式如下:

County,Town,ZIP_CODE
Bronx,Bronx,10451
Bronx,Bronx,10452
Bronx,Bronx,10453
Bronx,Bronx,10454
Bronx,Bronx,10455
Bronx,Bronx,10456
Bronx,Bronx,10457
Bronx,Bronx,10458
Bronx,Bronx,10459
Bronx,Bronx,10460
Bronx,Bronx,10461

那么相应的code就可以写成:

CREATE MULTISET TABLE liyun_NY_DA_ZIP (
county CHAR(20)
,town CHAR(20)
,ZIP_CODE CHAR(5)
)

Insert into liyun_NY_DA_ZIP values (?,?,?); /* import data from csv */

Teradata的FastExport

这个目前还只在linux下试验成功过...

一段代码长成这个样子:

.logtable p_r_test_t.exp_log;
.logon mozart/username,password;
.begin export sessions 20;
.export outfile usa_all.txt mode record format text;
select cast(cast(x.byr_id as decimal(18) format 'ZZZZZZZZZZZZZZZZ9') as CHAR(18)),
',' (char(1)),
cast(cast(x.recency as decimal(4) format 'ZZZ9') as CHAR(4)),
',' (char(1)),
cast(cast(x.frequency as decimal(4) format 'ZZZ9') as CHAR(4)),
',' (char(1)),
cast(cast(x.monetary as decimal(8) format 'ZZZZZZZ9') as CHAR(8))
from p_r_test_t.dw_mbl_rfm_all x;
.end export;
.logoff;

然后存成一个脚本文件,比如your_fast_export_script.txt, 之后就可以直接在Shell里面调用了。

fexp < your_fast_export_script.txt

需要注意的是如果报各种稀奇古怪的错误,可能是编码尤其是换行符的问题...

FastLoad还米有试过。

Teradata导入导出到R里面

Teradata导出数据到R里面

如果想省心,那么就直接用TeradataR这个包。然后可能需要安装一下TD的ODBC driver: http://downloads.teradata.com/download/connectivity/odbc-driver/windows

简单的配置之后,就可以直接调用TeradataR了。

library(teradataR)
TDuid <- "xxx"
TDpwd <- "xxx"
connect_mozart = tdConnect(dsn = "xxxxx", uid=TDuid, pwd=TDpwd, database = "xxx")
#download the table and run summary locally
data_open <- tdQuery(" select * from xxxx order by 1,2,3,4,5,6;")
tdClose()

但是可惜的是这个包里面不提供导入回TD,只能去调用RODBC的原始命令。

R里面数据导入Teradata

#upload data
connect_mozart = odbcConnect(dsn = "xxx", uid=TDuid, pwd=TDpwd)
summary(aim_data)
sqlQuery(connect_mozart, "drop table xxxx;") #如果已经有这个表了
sqlSave(connect_mozart, aim_data, tablename="xxxx",rownames=F,fast=T)
odbcClose(connect_mozart)

这样就可以了。不过速度真心不怎么快(fast=F)会更慢。不建议使用大于1k行的R data.frame。

Teradata导入导出到SAS里面

Teradata导出数据到SAS里面

鉴于SAS可以直接用FastExport和FastLoad,这个速度就相当可观了。

proc sql noprint;
Connect To Teradata (user=&user password="&pwd" database=access_views tdpid=mozart mode=teradata);
create table xxx.xxxx as select * from connection to Teradata
(
select * from Xxxx.xxxx order by 1,2,3,4,5,6;

);

SAS里面数据导入Teradata

类似的,可以很快的把数据从SAS导入TD。

proc sql noprint;
Connect To Teradata (user=&user password="&pwd" database=access_views tdpid=vivaldi mode=teradata);

execute (drop table xxxxx.xxxx) by teradata;

execute
(
create table xxxxx.xxxx
(
USER_ID DECIMAL(18,0),
CMC_ID INTEGER,
CMC_START_DT DATE FORMAT 'YYYY/MM/DD',
SEGM_GROUP VARCHAR(255) CHARACTER SET UNICODE NOT CASESPECIFIC,
CHANNEL VARCHAR(5) CHARACTER SET UNICODE NOT CASESPECIFIC
) PRIMARY INDEX(USER_ID, cmc_id)
) by teradata;

Disconnect From Teradata;
quit;

proc append base=vivaldi.xxxx(fastload = yes fbufsize = 32000)
data=mz_sas.xxxx force;
run;

由于调用了fastexport和fastload,这速度明显改善,实测2G数据大概在5分钟左右,蛮快的了(6M/s)呢。

Categories
读书有感

≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(六)

呃,我觉得我的笔记稍稍有点混乱了...这周讲的依旧是线性分类器,logit为主。anyway,大家将就着看吧。

logistic regression

首先我们考虑最一般的,有K种分类的场合。依旧,我们用来代替作为观测到的分类结果,那么则有:

为最优的预测结果。这里我们希望找到一种线性的形式,还需要使用一些单调变换保证预测值在之间。因此,我们对于每个分类,假设

进一步的,我们取任意类K作为对照组,且各组相加概率之和必为1,所以有:

所以,最终得到两组之间的概率比值为:

最后求解的时候,就是直接用最大似然准则,来求解

这个最大似然函数计算起来比较麻烦,通常很多是数值解。下面以为例,来展示求解过程。

首先我们这个时候有两类,不妨记作1和0,则

则它的对数似然函数:

然后我们求导可得:

之后可以用牛顿法迭代求数值解:

其中二阶导数部分可以化简为:

经过简化之后,这里相当于加权的最小二乘法,目标函数为

所以整个算法可以写作:

0. 令或任意起始值

1. 计算矩阵.

2. 新的.

3. 重复1,2步直至收敛。

这类方法成为IRLS(不断重写的加权最小二乘法)。

LDA和logit选择

其实也没什么定论,两者均为线性,只是一般我们认为LDA需要假设联合正态且方差相等,比较强;而logit假设没有这么强,相比而言更稳定。

perceptional分类器

perceptional分类器是一类相对简单的分类算法,以两类场合为例。为了方便起见,我们假设两类为1和-1,则目标是找出一条直线可以完全分割出来两群点。这里转化成数学的语言,就是找到W使得

或者简化为:

算法也很简单:

1. 给定任意的W值,比如0. 如果,出错。

2. 令新的,重复第一步。

这里可证一个定理:如果原数据集是线性可分的(即W存在),那么在有限步内perceptional算法收敛。其实从第二步可以看出,这样的改进总是趋近于目标的:,一定是在逐步增加的。

同样的算法推广到多累场合,我们就需要引入特征向量,使得条件概率。这样我们的目标就是找到使得

同样的,从0开始,当时,,直至收敛。

不过有意思的是,实践证明,最后使用训练过程中的的平均值效果会更好,而不是最终的值。

--------笔记结束,废话开始--------

到这里,分类器吴老师已经介绍了三类:LDA,Logit和perceptional。其实我一直觉得比较好玩的是分类器和聚类方法的对比——虽然一个是有监督,一个是无监督的学习,不过有的时候我们就算有的观测值也不一定直接就去用——聚类方法某种程度上显得更加自然一些。这也是大家把模型与实际业务相结合起来的成果吧,总要更符合业务上的直觉才可以。是自然的展现群落的形态,还是给定一些条条框框只是去预测?实践中真的是,都去试试才知道那种更符合一个具体案例的需求。这也是在industry玩的比较开心的缘故,没有那么多条条框框,没有那么多“约定俗成“的规矩,需要自己去一步步挖掘这些算法的用武之地。看着一个个自己熟悉或者陌生的模型被逐渐的改造和应用,也是一件蛮开心的事情呢。

Categories
网络新发现

又来用数字挑逗民意

昨晚看到一篇广为流传的房奴文章,比如网易上转载的,实在是让我忍无可忍,决定抄起笔来对付一下这种用数字挑逗民意的行为。真受不了~~~

首先这类文章都会有一个很鲜亮的标题,比如这里的“三代房奴面面观:一代赚满 80后才是真正房奴”。房奴,80后,这两个词加起来就够吸引眼球了,还有“三代”,真的是三代通杀。其实我也没资格批评别人,前段时间写个SAS笔记还搞个“七天搞定SAS”这种噱头,明显动机不纯。

不过题目吸引人也就罢了,正文读下来八成要让人义愤填膺一番。感觉自从今年春天借给松鼠会做讲座的机会,看了一眼现在的新闻之后,就对各种挑逗的方法有了更强的免疫力。

挑逗民意最最典型手段就是以“个例”代替群体。这句话怎么说呢,其实就是不断的举出各种极端的例子。比如这篇文章,对于三代人,各找了一个代表:

70后:于先生

-年龄:35岁

-职业:某金融行业公司品牌策划室经理

-房产:南三环外丰台西马厂区域两居

-2007年购买时单价:6500元/平方米

-2012年该项目二手房单价:约29000元/平方米

35岁的于先生说,目前为止,自己还是一名房奴,但相比2007年买房那会儿,已经轻松和洒脱多了。

80后:陈女士

-年龄:31岁

-职业:广告公关公司合伙人

-房产:东城区富贵园

-2006年购买时单价:10000元/平方米

-2012年该项目二手房单价:38000元/平方米

我就看不大明白了,明明两个人才差了4岁,购房也只差了1年,怎么就被归为两代人的代表了?两个人的故事也没什么大的差别嘛,房价都翻了三四翻的样子。这两个其实还好,最让我看不下去的就是最后一个90后的例子:

90后房奴:生活乐趣才是王道

-人物:赵悦

-年龄:22岁

-职业:资产管理公司销售

-房产:朝阳区小悦城

-2012年4月购买时单价:37000元/平方米

-2012年该项目二手房单价:38000元/平方米

将90后这一代称作房奴可能并不准确,他们中的大多数人刚刚念完大学,但已有不少人也挤进了买房大军。但相对于80后的不堪重负,90后房奴更加轻松,从来就没觉得这是他自己需要承担的。

赵悦是一个重庆姑娘,2011年在英国念完书便来到了北京,父亲是重庆一家国有企业的老总,靠着父亲的关系,她很容易就在北京一家资产管理公司找了一份工作,每月薪酬将近8000元。

赵悦告诉记者,回国没几个月,家里就掏钱给她在朝阳的小悦城买了一个小公寓。这个楼盘位于朝青路上,距离年轻人扎堆的大悦城只有800米,那里聚集着优衣库、H&M等潮店,还有天天人满为患的各种麻辣香锅。“买这房子主要还是因为公寓不限购,而且一个人住也够了。”

赵悦选中商住两用的公寓不在限购范围之内。按照当时的房价,40平米的loft,单价38000元左右,一套房子150多万,不过这样的产权只有40年。“我其实对房子并没有感觉,从来也没觉得回国之后就要买房子,是父母觉得应该有个固定的房子。”

家里为她付了8成首付,只是象征性地贷了一点款,这是因为父母不希望赵悦花钱“月月光”。现在,赵悦每个月要还2000多块钱房贷,这一还款额在北京这样一个城市并不高。但即便是这样,赵悦还是觉得钱不够花。看看赵悦的生活账单,几乎80%钱用在了娱乐消费上,而她自己永远都不太清楚钱到底花到哪里去了。

由于小悦城还没有交房,赵悦在离金融街不远的官园租了一套精装一居室,房租5000元。这里几乎成了金融街的后花园,聚集了大量在金融街上班的小白领。如果全靠赵悦的工资,8000的工资交完房贷、房租,就剩下不到1000了,这点钱还不够她打车的。

赵悦父亲对她比较严厉,但她母亲则更宠爱她,直接给她交了一年的房租,即便这样,赵悦还是寅吃卯粮,经常刷爆信用卡,母亲经常替她还款,还时不时地暗中接济她一些零花钱。

对于国人热衷的房子,赵悦觉得有些不可思议。她自己数了一下,父母的房子、爷爷奶奶的房子加上购买的小公寓,在北京、重庆总计有六套房子。“我都不明白还不够么,我没法理解大家为什么这么热衷于买房子。然后把所有的钱都用来还月供,而每天的日子都过得惨兮兮。”

看看这些数字: 月收入8000(不算低),房租5000,贷款首付80%...一个个都是让人瞠目结舌的数字。通篇下来,90后被描述成了一个彻头彻尾的啃老族和富二代。可是,我们都知道,举例是最常用的论述方法,可是也不能总找最极端的例子吧?田忌赛马的道理大家都知道,总不能拿最差的和最好的比吧?

只是想问几个问题: 70、80后就没有月光和啃老族了么?70、80后在20出头的时候(现在90后的年纪)就不会寅吃卯粮么?拿70后的经理和80后的合伙人,跟一个90后的小销售比,这样公平么?

好好的文章,就从来不能保持客观。相比而言,有时候我觉得CCTV的新闻采访靠谱多了...纵是这样大家都在不停的咒骂。哎,新闻什么时候能保持中立性呢?