随机过程,机器学习和蒙特卡洛在金融应用中都有哪些关系

在投资理财领域蒙特卡罗方法是如何运用的? - 知乎92被浏览3710分享邀请回答3710 条评论分享收藏感谢收起2添加评论分享收藏感谢收起写回答&p&回答有点长,有缘者阅之。&b&我用了两周的时间来回答这个问题,有时候我回答起问题来的那个拼劲,被我回答过的问题都害怕。&/b&&/p&&p&为什么,到底巴菲特为什么会成功呢?巴菲特投资成功的真正秘密在哪里?&/p&&img src=&/v2-6de3eea7a0bbf_b.jpg& data-rawwidth=&800& data-rawheight=&864& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-6de3eea7a0bbf_r.jpg&&&p&&br&&/p&&p&&b&巴菲特阿尔法的秘密&/b&&/p&&p&&b&文/陈达&/b&&/p&&p&&br&&/p&&p&&b&-------------------------------------------&/b&&/p&&p&&b&贝佐斯见巴菲特。贝光头曰:“汝富甲天下,汝道至简,何以无人循君之道、与汝同富邪?”巴子对曰:“吾未尝见自甘于行迈靡靡、积跬步而慢富者也。”&br&&br&
----题记一&/b&&/p&&p&&br&&/p&&img src=&/v2-dd169a7dad8efba75a650_b.jpg& data-rawwidth=&5472& data-rawheight=&3648& class=&origin_image zh-lightbox-thumb& width=&5472& data-original=&/v2-dd169a7dad8efba75a650_r.jpg&&&p&(摄影:达某)&/p&&p&&br&&/p&&p&&b&一、立个FLAG&/b&&/p&&p&首先,我不太吹巴菲特,但这看似很不合理。因为对于我自己而言,老爷子是我为数不多的见过面握过手吃过饭的大神。我面对巴菲特高大身影的时候那膝盖就是软的,手心曾不禁沁出了猥琐的汗水,失礼地留在了老爷子冰凉而柔软的小手上。所以我只是巴菲特的一根卑微到了尘土里的粉丝,给老爷子系鞋带都不配。&b&但抛开粉丝身份,作为一个职业投顾,我是不太吹巴菲特的 —— 当然我也会吹,但是不像某些大V那种抛妻弃子一般的吹法——因为我不认为一个能力平庸、资源不足的人想要去复制 “巴菲特之道“会是一件好事。&/b&&/p&&p&&br&&/p&&img src=&/v2-68dcd33c8bd703e7943bbb071c7bbbb2_b.jpg& data-rawwidth=&824& data-rawheight=&589& class=&origin_image zh-lightbox-thumb& width=&824& data-original=&/v2-68dcd33c8bd703e7943bbb071c7bbbb2_r.jpg&&&p&(巴菲特与年轻时青涩的达某。请原谅照片感人的像素,达某双手捉襟见肘的布局也彰显了面对大神时内心情不自禁的小紧张。)&/p&&p&&br&&/p&&p&肯定有人会说:叫我们不要学巴菲特,你又要在这里搞什么妖言惑众?标普500五十年如一日地年化10%左右,而伯克希尔纺织厂五十年如一日地年化20%以上,风雨无阻,不曾一日耽误了修行。用什么词来形容——吊打?完虐?碾压?中出?爆到你怀疑人生?对于粉丝们而言,人生可以怀疑,但巴菲特绝壁不能怀疑。&br&&br&而我想说:臣妾不敢吶,我也一点都不怀疑巴菲特的牛逼。当年巴菲特主义传入中国,大江南北掀起了一股学习巴菲特争做股神的风潮。&b&除了老爷子业绩铁证如山以外,很多人在第一次接触“巴氏价投”思想的时候都有一种终于等到你的相见恨晚,因为巴菲特把权益投资的神秘外衣给扒了个精光,把投资赤裸裸的本质给你看,任何人有会有一种醍醐灌顶的错觉。就感觉自己的后脑勺被开了光一样。&/b&&br&&br&我一点都不怀疑巴菲特的牛逼。我只是想说,对于一个能力平庸、资源不足的一般投资者而言,学巴菲特你很难学成。&/p&&p&一般而言之于巴菲特的成功,有两套常规解释 —— 第一套是鸡汤,而第二套是硫酸。鸡汤诸如:要坚持信念呐同志们;要选对小伙伴呐;人贪我怂,人怂我贪;不要裸泳啊;复利无敌,要坚持滚雪球,要有很湿的 ** 和很长的 ** —— 咦洒家没有开荤腔为啥会有马赛克 —— &b&滚雪球嘛,就要有很湿的雪与很长的坡。&/b&&br&&br&硫酸诸如:1. 巴菲特是美国人,你不是美国人?那你别指望了;2. 巴菲特他爹是个&b&众议员&/b&,神马你爹是个&b&服务员&/b&?那你别指望了;3. 巴菲特的老师是&b&格雷厄姆&/b&,啊你的老师是&b&格格巫&/b&?那你别指望了;4. 伯克希尔的投资人无法撤资,什么你的投资人撤资如拔丁丁?那你的基金别指望了。&br&&br&&b&鸡汤当然你可以痛饮,只要别以为是喝了什么仙汤就行。&/b&他人贪婪我恐惧,他人恐惧我贪婪这种话刚听到时确实会让你心花怒放,&b&但我可以明确告诉你在实践中基本是枉然,这句话并不能教你择时;对于一个抄底者而言在他人恐惧的时候,大多数情况下你最正确的姿势应该是也跟着恐惧,不然你接几把飞刀就知道了......&/b&至于滚雪球这个比喻,真正在银蛇蜡象之中有过亲身滚雪球经历的人都知道,自然界中的雪球要么越滚越小,要么滚大了以后最终爆裂成粉想要怒放的生命。&br&&br&&b&比起鸡汤,硫酸式的解释害人程度其实较小,反正就是各种决定论了强调屌丝无可逆袭——不是我们不努力,奈何对面开高达呀。如果你信了,对主动投资心灰意冷,那去买买指数基金其实也是极好的(参见上面巴菲特给詹姆斯的建议)。&/b&但硫酸解释仍然有问题,首先做人我们总归还是要强调一下主观努力的伐;另外这解释本身对老爷子不公平 —— 是的巴菲特出身确实不错,但那也不是顶级豪门,况且还是在内布拉斯州加这种难见禽粪之地,比老爷子自然条件好的同志大有人在,也没见有第二个巴菲特被决定论所决定。&/p&&p&辣么,老爷子到底牛逼在哪?&/p&&p&如果我们把巴神抓起来,用满清十大酷刑去逼他说出成功的秘密,他可能会说价值投资,他可能会说安全边际,他可能会说护城河,但有一点你不给他上个老虎凳他肯定不会说:老子有杠杆。&br&&br&学术界曾经有一篇引用次数颇多的论文解析过巴菲特的业绩,叫《巴菲特的阿尔法》(Buffett's Alpha),对巴菲特到底为啥会成功这个问题进行了颇为深入研究。&/p&&p&&br&&/p&&p&&b&二、老爷子不只是运气好(这一节我在另一个问题里回答过,如已读,请跳跃)&/b&&/p&&p&咱先不说杠杆的问题,先说说运气。&b&时至今日,仍然有人认为巴菲特仅仅是运气好。&/b&他们会说——你怎么能肯定巴菲特不是那个超级幸运儿呢,比如你让十亿人扔硬币,每年扔一次,正面生反面死,可能扔了三十年之后仍然有那么几个哥们顽强而又执着地活着;你马后炮偏差发作认为简直太神奇了这几个幸存的哥们简直是命运的安排。&br&&br&但十亿人同时扔硬币,最后就是会存在几个生命的奇迹,这在概率上完全靠谱。而同理你兜里只有两块钱,然后你玩扔硬币猜正反的赌博,只要你连续赢三十轮,你就会有十亿块钱了。那要如何确定巴菲特就不是那个连赢三十轮、被命运所安排的绝世之异常值(outlier)呢?&br&&br&&b&这还真不太容易证明或证伪。 你要把一个人的运气与造化剔除出于他/她的实力本就难如登天,说不定冥冥之中运气就是实力不可分割的一部分。我曾听闻某司招聘,把收到的简历先随机切成两半,其中的一半直接就扔掉不看,美其名曰:运气不好的人我们不要。&/b&&br&&br&比如我们生活中就见过:隔壁王大胆,十倍杠杆融资炒创业板,炒成王千万。那么他是运气好,还是技艺高?&br&&br&好在统计学能拯救世界。比如在统计上有一个标准化(standardizing)的思想在这里就很有用。举个例子,中国的一个姓白的胖子体重两百斤,而美国一个姓怀特的胖子三百斤,你问白胖子和怀特胖子孰重,这个自然一目了然,300 & 200;但如果你要问白胖子与怀特胖子孰胖(我们简化问题,在此不论体脂或者BMI,单论重量),这个就是个科技问题了,因为白胖子和怀特胖子人种都不同,你不能直接比体重。&br&&br&可能有人会想到平均数。中国平均成年男性的体重大概是130斤,美国平均成年男性的体重大概是180斤;结果白胖子超出平均70斤,而怀特胖子超出平均120斤——所以怀特胖子更胖。这个逻辑看似合理但其实很无厘头——如果这里不是个胖子而是头亚洲象呢——比如成年亚洲象体重10000斤,某头叫小白的亚洲象10200斤,超出了平均200斤,难道我们直接能得出结论说小白象比白胖子要胖?这个错误的逻辑能引起全场包邮一般的笑声。&br&&br&这里就需要统计里可以排得上交椅的“标准差”出场,她表示数据的离散程度,而在金融里多用来表示波动。&br&&br&&b&你想过为啥标准差要叫“标准”差么,难道还有不标准差?&/b&虽然发明此术语的Karl Pearson没有解释命名动机,但我们可以猜想是因为这个统计量可以用来“标准化度量”——就跟高斯分布被称为正态分布类似,不然都是变态。——假设我们知道美国成年男性体重的总体标准差是50斤,而中国的是30斤(这些数字我是乱取的),我们就可以用如下公式进行“标准化度量”。&/p&&img src=&/v2-f6c2ccd7f29bef5f269e62_b.jpg& data-rawwidth=&1780& data-rawheight=&684& class=&origin_image zh-lightbox-thumb& width=&1780& data-original=&/v2-f6c2ccd7f29bef5f269e62_r.jpg&&&p&&br&&/p&&p&其中 z 是标准化后的分数(z-score),μ是总体平均数,σ是总体标准差。所以白胖子最后的z-score是 (200-130)/30=2.33,而怀特胖子的z-score是 (300-180)/50=2.4,2.33 & 2.4,所以白胖子以微弱的劣势输给了怀特胖子;而且更为奇妙的是,由于分子分母单位统一彼此消除,所以无论你单位取斤取磅取钱取盎司取千克取吨,最后的数字都是一样的——标准化嘛,单位也会被天下大同掉。如果我们假设人的体重呈正态分布,通过z-score=2.4 我们可以知道怀特胖子要重于99.18%的美国成年男性,他绝对是朵大奇葩。(声明:这里完全是方便举例,我不歧视胖子,如有伤害纯属意外。你可以找维权骑士。)&br&&b&&br&在标准化上多花了点口水,是因为我认为这个思想非常重要;而同样的思想运用在金融中,就有了夏普比率(Sharpe Ratio)。&/b&夏普比率就是将回报标准化的一个方法,分子是组合回报率减去无风险回报率,即所谓的超额收益(excess return,但在这里可以称作风险溢酬);分母是组合超额收益的标准差。分子分母做一个除法,得到的就是平均每承受一份风险(标准差),能够获得多少额外收益。&/p&&img src=&/v2-2c4d4a002e0e2e8b2a82ce_b.jpg& data-rawwidth=&996& data-rawheight=&467& class=&origin_image zh-lightbox-thumb& width=&996& data-original=&/v2-2c4d4a002e0e2e8b2a82ce_r.jpg&&&p&&br&&/p&&p&比如基金甲的超额收益是20%,而基金乙的是10%,只要你不是菜场大妈的思维,你很难直接一口咬定说甲比乙更出色——万一基金甲是乐粉而基金乙是银粉呢,风险(学术上理解为波动)不可同日而语。这样就要算夏普比率。比如基金甲的超额收益的标准差是30%,而基金乙是10%,那就可以得到基金甲的夏普比率为0.67,基金乙的夏普比率为1,我们可以下结论说:嗯,乙更牛逼。&br&&br&信息比率(information ratio)与夏普比率相似,但用benchmark的收益替代了无风险收益。&br&&br&&b&夏普比率有个奇妙之处—— 她不受杠杆影响;因为如果你上了杠杆,夏普比率的分子分母同时会放大或缩小,保持整体不变。所以你隔壁那个上十倍杠杆的王大胆,遇上夏普比率就要现出原形。&br&&br&从1976年到2011年,巴菲特的伯厂,夏普比率是0.76。这个数字未必有多亮瞎,你算算自己这两年的夏普比率说不定都能大于0.76;但是放眼1926年至2011年间所有存续超过三十年的股票和基金——但凡是能坚持三十年的,无论是个股还是基金,巴菲特的夏普比率冠绝其间。美国整体市场的夏普比率仅为0.39。&/b& &b&所以我相信,巴菲特的成功大概率不会仅仅是因为运气好。&br&&/b&&/p&&p&&br&&/p&&p&&b&三、他人之财&/b& &/p&&p&&b&但是咱要摸着咪咪说句良心话,0.76的夏普比率也并不是真的是牛到了姥姥家。&/b&我用TD Ameritrade的搜索平台进行筛选,历史夏普比率在0.8以上的基金,有800多个……(当然他们都没有三十年历史)。&br&&br&那仅仅靠0.76的夏普比率持续几十年老爷子就能把自己搞成世界首富了?当然没那么简单。我之前说了杠杆不影响夏普比率,但是杠杆必定直接影响投资回报率。&br&&br&&b&巴菲特上杠杆已经不是新闻——虽然他的股东信上屡屡劝人不要上杠杆,有点成年人劝熊孩子不要玩火的意思。老爷子的原话是(见于2010年股东信):“当杠杆为你借力时,你人生得意,你老婆觉得你的脸帅得放光,你邻居嫉妒得满眼放光;但玩杠杆是会上瘾的,你一旦尝到甜头就再也浴霸不能。正如我们小学三年级学到的——但有些人在2008年学到——哪怕是再长的一串正数,乘以一个零的话,一切就归于乌有。历史告诉我们杠杆乃是造零的大杀器,哪怕玩杠杆的人聪明绝顶。”&/b& &b&话虽如此,老爷子自己还真没少上杠杆。&/b&很少人知道伯克希尔纺织厂的杠杆到底有多少,因为不太好算清。你可以算净资产负债率,就说所谓的 debt-to-equity ratio,但伯厂杠杆何止是借债,还有大家耳熟能详的保险浮存金(float)——简单说就是保险费预收来,然后预留理赔款,剩下的钱用于投资——浮存金在balance sheet上表现为负债,历史上平均占到伯克希尔总负债的36%。所以你也可以算 (debt + float)/ equity,《巴菲特的阿尔法》算出来伯厂历史上是 0.4 /1 ,也就是杠杆率为 1.4 :1 。&b&但债务+浮存金也不完全就是所有杠杆了,《巴菲特的阿尔法》用 (资产市值-现金)/股权市值 的公式,算出伯厂历史杠杆大约为1.6:1。也就是100块自己的钱,加上60块别人的钱。&/b&&br&&br&我们知道美股市场平均回报约为10%,除掉无风险收益后的风险超额收益是6%,巴菲特的超额收益是19%,所以如果你认个怂长期投资指数,你和老爷子的差距就是一年13%;但如果将 1.6:1 的杠杆应用于美股平均回报,可以将得到近10%的超额回报。也就是说如果你能像巴菲特一样获得 1.6:1 的廉价杠杆,然后去投资指数基金,你和老爷子之间的差距就会缩小到9%。&/p&&img src=&/v2-aabe67b3ebf42cd5d5d045_b.jpg& data-rawwidth=&1724& data-rawheight=&882& class=&origin_image zh-lightbox-thumb& width=&1724& data-original=&/v2-aabe67b3ebf42cd5d5d045_r.jpg&&&p&(巴菲特 1.6:1 杠杆的魔力。$10000投资30年,假设指数年化回报是10%,无杠杆的话$10000变成$158000,如果加了1.6:1的杠杆$10000变成$253000。 )&/p&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-678a7fdebc1fd4c0d8a854_b.jpg& data-rawwidth=&1426& data-rawheight=&1062& class=&origin_image zh-lightbox-thumb& width=&1426& data-original=&/v2-678a7fdebc1fd4c0d8a854_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&&b&但这个9%的差距毕竟仍然是一个挺大的数字,你要怎么解释?——那还能怎么解释,剩下的都是巴菲特的牛逼呗。&/b&&/p&&p&再讲老爷子的牛逼之前,先中场休息一下。&/p&&p&&br&&/p&&p&-----------下半场的大风歌线--------------&/p&&p&&br&&/p&&p&&b&詹皇见巴菲特。皇曰:“叟!巨富如寡人者,何以伺赀而谋利邪?”巴子对曰:“皇之馀生,可月供于低费用之指数基金,此乃大善之计也。藏金于美利坚如狡兔三窟,屯之经年累月如为山九仞,持之卅、卌载之光阴,必不负于陛下。此计妙甚,陛下无可忧虑者也。”&/b&&/p&&p&&b&
----题记二&/b&&/p&&p&&br&&/p&&img src=&/v2-c13f7f6d298b938ed58ca1_b.jpg& data-rawwidth=&526& data-rawheight=&395& class=&origin_image zh-lightbox-thumb& width=&526& data-original=&/v2-c13f7f6d298b938ed58ca1_r.jpg&&&p&&br&&/p&&p&我们先回顾一下上半场,有这么几个基本结论 —— &b&1. 老爷子的成功大概率不是一个随机事件,也就是不纯粹靠运气。2. 能够持续三十年以上 0.76的夏普比率确实很牛逼,但是仍然不足以牛逼到世界首富的地步,老爷子的秘密是上了一个 1.6:1 的廉价杠杠。3. 如果你以 1.6:1 的投资杠杆投资指数,你和巴菲特之间仍然会有大约9%的差距,而这个差距就说明了老爷子自然还是有他的牛逼之处。&/b& &/p&&p&&br&&/p&&p&&b&四、老爷子的牛逼&/b&&/p&&p&有很多人大言不惭地说巴菲特是美国资本主义的毒瘤,他们的论调依据是巴菲特本质上是反竞争的,你看老爷子整天嚷着要挖宽护城河、保卫土城堡,要拒竞争者于千里之外。然后他们说:反竞争 = 资本主义的毒瘤。&br&&br&虽然他们的逻辑和结论都挺煞笔的,但是论据倒是挺客观,&b&运用自身资源把竞争对手搞死是老爷子的一贯手段,而这个手段一般投资者并不具备。这个关键词叫 activism。&/b&&br&&br&先说下啥叫activism,或者activist是群什么人。 activist investor 这词中文可以翻译为主动型投资者,即与一般被动型的股东相区别,&b&还可以被意译为维权型投资者、激进型投资者、拼命型投资者&/b&;一般你投资某个上市公司股票无非就是想搭个便车;但某些股东由于持股巨大,就总琢磨着搞进董事会影响管理层决策,凡事亲力亲为。花街比较有名的 activist 有潘兴广场的比尔·阿克曼(Bill Ackman)、伊坎企业的卡尔·伊坎(Carl Icahn)、绿光资本的大卫·埃因霍恩(David Einhorn)等等。&br&&br&比起埃因霍恩这种动不动就想把通用汽车的股票拆成两档的actvisit investor,巴菲特的activism好像并不太为人所知——不过老爷子表示你们玩的不过是我当年玩剩下的。&b&在老爷子漫长的赢家人生里 activism可真的没少出现。巴菲特可也是曾有过冲冠一怒为口气的燃烧岁月的,曾也是动不动就要买光伯克希尔纺织厂并把原厂长给怒炒掉的。八旬老汉曾经也年轻过,老爷子虽然面善,但他能是一个善茬?&/b&&/p&&img src=&/v2-35c84e69c197a87ed1ad_b.jpg& data-rawwidth=&700& data-rawheight=&394& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&/v2-35c84e69c197a87ed1ad_r.jpg&&&p&&br&&/p&&p&比如,举个例子,大家可能都熟悉老爷子曾经收购《布法罗晚报》的故事,在很长一段时间里《晚报》是伯厂唯一全资收购的报纸。当时伯克希尔花了3250万美金收购《布法罗晚报》,而彼时《晚报》的经营性利润(operating income)不过区区170万美元,所以这笔收购是很不便宜的,看不出半点“巴氏价投”的绰约风姿。&br&&br&当时《晚报》在水牛城的最大对手是《信使快报》,但《晚报》没有周末版,而《使报》在周末就比较出彩。结果老爷子收购了《晚报》之后就迅雷不及掩耳地就搞了个周日版,然后开始了与《使报》旷日持久的价格战和逼格极low 的残酷竞争。&br&&br&本来均能盈利的《晚报》和《使报》,结果手牵手陷入了亏损,而且还都被拖进了与工会的缠斗之中;《晚报》曾亏到芒格寝食难安,但巴菲特有钱有势能撑得住场子;而没有爹的《使报》最终无法扛损而黯淡出局。《使报》最后关门大吉。《&b&晚报》在完爆了《使报》之后壕取地区性垄断地位,到了1986年,税前利润已高达3500万美元。《布法罗晚报》的胜利对伯厂至关重要,因为这是她当时最大的一个仓位。&/b&&br&&br&顺便提一句,芒格曾经蔑称不断涨价的 Valeant为一条臭水沟,我当时在年会现场,听到之后第一反应就觉得这个真的是讽刺到不行。&b&因为芒格本人就曾说过(见于Alice Schroeder的巴菲特传记《滚雪球》):巴菲特屡试不爽的管理技术就两点:抽出公司账面上的现金——然后再给公司的产品涨价。&/b&&/p&&img src=&/v2-e81b961a9f1ad3a7ab3da27b4b66c69d_b.jpg& data-rawwidth=&1024& data-rawheight=&574& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/v2-e81b961a9f1ad3a7ab3da27b4b66c69d_r.jpg&&&p&&br&&/p&&p&&b&除了碾压竞争以外,老爷子通过碾压投资对象管理层来释放价值也是一把好手。再举一个稍微冷僻一些的例子。&/b&&br&&br&上个世纪五十年代,这还是在巴菲特的前伯克希尔时期,当时的巴菲特合伙基金看上了一家叫Sanborn Map 的公司,该公司致力于出版与更新美国各大城市的精密地图,而这种地图精密、详细、内容丰富到爆炸。详细到啥地步?——老爷子家乡小镇奥马哈的地图,做出来可以重达50磅(大约23千克)。那谁会需要这些比当今的卫星图像还要详细的地图呢?——比如火灾保险公司,他们就迫切需要这些信息来衡量承保风险。&br&&br&在公司早期,由于近乎垄断的地位,Sanborn地图公司利润惊人,而且几乎不受经济周期影响,也几乎不需要资本再投入。&b&这就是巴菲特最喜欢的不需要巨大的资本投入却可以源源产生现金流的公司。由于钱多又没处花,这家公司自然而然地于三十年代开始了投资生涯,一半债券一半股权,并逐步积累了一个颇为可观的投资组合。&/b&&br&&br&后来,公司的老本行就比较凋敝,从1938年到1958年,道指从100涨到了550,但Sanborn的股票从110美元跌到了45美元。但与此同时,Sanborn公司投资组合的价值从每股20美元涨到了每股65美元。&b&这就说明——在1938年投资者觉得地图业务值90块,投资值20块;但到了1958年,投资者觉得公司投资资产部分至少要打个七折,而地图业务可以白送。面对这个情况,老爷子的大棒就饥渴难耐了——巴菲特合伙基金用了35%的资产搞了这家公司。&br&&/b& &b&看到这里我忍不住想插播一下,大家有没有觉得有点似曾相识,这一幕是乳此熟悉?主业异常凋敝,但投资组合蹭蹭蹭涨,这让你想到了哪一家中概公司请大声说出来 —— 我们的老朋友人人公司嘛 —— 主营稀烂、股价低迷、但投资组合价值连城。咋样,阅读关于巴菲特的书多如牛毛的你,摩拳擦掌但总是哀叹没有价投机会的你,想学巴菲特玩一把巴氏价投的你,敢用35%的仓位下注人人吗?&/b&&/p&&img src=&/v2-e648d1e941889cbc1ba62775cefe63cb_b.jpg& data-rawwidth=&1093& data-rawheight=&790& class=&origin_image zh-lightbox-thumb& width=&1093& data-original=&/v2-e648d1e941889cbc1ba62775cefe63cb_r.jpg&&&p&&br&&/p&&p&&b&先等等,别太乐观,且看故事发展。&/b&与人人一样,Sanborn打折扣的原因是市场对管理层的不信任——投资收益巨大,谁还有心思去苦逼哈哈地去搞实业。 那董事会呢——光景更是稀烂,十四个董事里有九个来自于保险行业(也就是Sanborn的客户,这里的利益冲突你懂的),且九个董事一共持有46股(公司总股本是105000股),与股东利益完全不绑定。他们毫无动力去为公司股东释放价值。&br&&br&公司的前主席去世后留下个孤儿寡母,寡母持有15000股,孤儿是公司董事,并对公司光景异常不满,在争取公司元首职位而不得的情况下其愤而辞职。于是这些股票就被巴菲特给收购走。之后巴菲特又在公开市场增持至24000股,占公司总股本44%,并亲自进驻董事会;他还联合个别其他不满的大股东,开始向管理层施压。最后为了避免一场代理权大战(proxy fight)管理层选择让步,因为他们知道即使开战巴菲特联盟也胜券在握。最后Sanborn的投资组合以公允价格被分拆出来,价值得以释放,利润得以彰显。&br&&br&&b&是役,老爷子合伙基金在这个35%的仓位上获利大约是50%。大家可想而知这一战对于早年的巴菲特及其襁褓中的帝国是个什么意义。&br&&br&所以对于价值投资而言,有时候看到价值并不难,但如何释放价值才是千年难题。这也是咱现在讨论投资人人公司的关键,大多数人不具备巴菲特这种直接杀进去庖丁解牛的实力。我们都非常清楚巴菲特在富国银行、美国运通这些超巨型上市公司上躺着做个安静的美股东,但比较忽视巴菲特曾经也是 —— 而将来如果需要他仍然会是 —— 一个activist。&/b&&br&&br&用老爷子在1960年投资者信的原话来讲:&br&&br&“目前我们利润衰减的被动型投资与利润猛涨的主动型投资( control investments,在这里主动 vs. 被动不是主动管理 vs 指数基金,而是主动参与决策 vs. 被动当个股东)到底哪块更重要?我其实并不知道,因为这取决于当时的市场状况。&b&我目前的态度是,将此二者当做此消彼长的策略毫无道理......在很多情况下吃瓜群众都喜欢搭便车(coattail riding),而大股东必须要为盈利不佳或者利用不足的资产想想办法,来扭转局面。我们在 Sanborn 和 Dempster 的投资上都亲力亲为,但在其他条件不变的情况下,我们还是更愿意别人来干这个累活。当然,在这种情况下一是要吃准巨大的投资价值,二是我们还要分外留意咱在搭谁的车。”&br&&br&“我们还要分外留意咱在搭谁的车。”&/b&&br&&br&巴菲特不但在前期对一些大仓位关怀备至,中后期老爷子在他的上市公司投资组合上其实也没少操心,并不是躺着赚钱。而除此之外,&b&老爷子最牛逼的还有一点,他很知道什么时候应该做activist,而什么时候应该避免 proxy fight。&/b&比如可口可乐公司,曾经有过一段时间股东们都希望老爷子出面去砍一砍高管们天价的报酬。但是巴菲特冷静地一看,发现这是要乱——关键时刻与其投票宣战,不如私下和谈化干戈为玉帛,于是最后此事和平解决。&b&巴氏 activism 的哲学:1. 如无必要,千万不与生意伙伴开战;2. 公司董事会:一半是生意,另一半是人情。好的生意人如好的政治家:知道什么时候应该和平而什么时候应该战争,也知道什么时候应该仁慈什么时候应该残忍。&/b&&br&&br&时常笑靥如花的巴菲特残酷起来让人也是很害怕:伯克希尔最近正忙着与巴西的私募基金 3G一起给 Burger King 和 Kraft Heinz 进行全方位的裁员减支。自从合并以来Heinz已经有五分之一员工(大约1万人)被无情裁掉;媒体形容此事:如割喉一般(cutthroat)。&/p&&p&&br&&/p&&img src=&/v2-f7b389c70c33f4376ee1_b.jpg& data-rawwidth=&800& data-rawheight=&614& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-f7b389c70c33f4376ee1_r.jpg&&&p& (媒体对于Heinz裁员的讽刺)&/p&&p&&br&&/p&&p&&b&巴菲特不仅是他某些投资的activist,更是他自己的公司——伯克希尔纺织厂的终极大activist,老爷子铁腕治厂五十余载,伯克希尔全身上下都透着浓浓的遮掩不住的牛逼与不凡。&/b&任何上市公司想要模仿伯厂的成功模式,画虎类犬几成必然。是的你可以买上几个保险公司,是的你可以全资吞下一些极好的生意,是的你可以长期持有一篮子蓝筹股,你可以幻想自己在搞伯克希尔模式。&br&&br&&b&但是你能几十年如一日地在利润满盈的情况下坚持不分红吗?你能挡住花街的压力让你做这做那吗?你能无视公司短期的股价波动吗?如果企业庞大,你能避免官僚化吗?你能放权给手下的经理吗?你能用一种类似合伙的方式统领一个市值千亿记的上市公司吗?你能不给你公司的董事们开工资吗?&/b&——标普500公司董事会席位的平均报酬是25万美元,伯克希尔是3800美元——因为伯厂的董事们诸如比尔·盖茨啥的根本不care报酬,这些大手笔持股的董事是发自内心真正地关切伯厂的命运,因为他们的伯厂股票太值钱。&br&&br&&b&伯克希尔,从各个角度看都是一个变态的公司。&/b&我曾到过伯厂的全球总部 —— Kiewit Plaza
—— 其派头不会超过铁岭市民政局大楼,你会彻底沦陷于惊愕之中 —— 这TM是一家市值4000亿美元公司的总部?这种档位这种级别的公司不应该在地球上造个 home 键吗?(前段时间读到一文,说国内一家APP创业公司拿到300万天使轮后第一件事就是去租一个200多平方的办公区,当然不久后就被迫要搬走了。)&b&而伯克希尔的内在系统 —— 其公司治理更是变态无比,全世界可能都找不出第二家来,而这一切都是因为有一个八旬老汉在那里守着。很多人会问在巴菲特之后伯克希尔将如何如何,芒格却直接反问道:你们觉得世界上有多少人能做巴菲特做的这些事?&/b&&/p&&img src=&/v2-ed2e51f97b699bf81ce60da033e28534_b.jpg& data-rawwidth=&3248& data-rawheight=&2160& class=&origin_image zh-lightbox-thumb& width=&3248& data-original=&/v2-ed2e51f97b699bf81ce60da033e28534_r.jpg&&&p& (伯克希尔·哈撒韦的“全球总部”)&/p&&p&&br&&/p&&p&&b&我们说了杠杠也说了activism,这两件事在老爷子的牛逼路上可不是锦上添花的,而是雪中送炭;这两个元素无论缺了哪个,老爷子虽然还是可能成功,但是不可能成功到这个令人发指的地步,而成为这个星球上最有名的投资家。&/b&&br&&br&老爷子牛逼路上的这两个因素是一般的个人投资者很难做到的,哪怕你掌握了巴氏价投的精髓。所以我不确定你要尝试去复制巴菲特之道一定是一件好事。如果你表示不能赞同,那可以想想如果现在持仓了35%的人人股票,是个什么感受。&br&&br&当然老爷子还是有很多可以学的地方,这方面的记载已经车载斗量不可胜数了,能力圈、护城河、安全边际三连击,幼叟皆知,我也不想在此累牍。就简单讲一个,回到一开始提到的那篇论文《巴菲特的阿尔法》。&br&&br&这篇论文用 Carhart 四因子模型分析了一下巴菲特的回报表现,这个模型本身不复杂,我们回顾一下Fama-French三因子模型:1. 市场风险溢价因子,股票市场回报减去无风险收益率;2. 规模因子(SMB, small minus big),反应公司规模,历史上小规模公司表现好于大规模公司;3. 价值因子(HML, high book-market minus low book-market),反应公司账面价值与市值之比,历史上此比率高的公司表现好于比率低的公司。而 Carhart 的四因子模型就是在三因子上再加一个动量因子(UMD,up-minus-down),表示涨势的股票与跌势的股票之差(近12个月股价表现最好股票的加权平均与表现最烂股票的加权平均之差)。&br&&br&分析的结果也很简单——四因子模型不能解释巴菲特的阿尔法(超额收益),规模、价值、动量这些因子在巴大神面前都是渣渣。于是研究者测试了其他两个因子,第一叫是“对赌beta”(BAB,betting-against-beta),意思是做多低beta资产并做空高beta资产;第二个是质量因子(QMJ, quality-minus-junk),反映做多“优质”公司——公司高利润、高增长、高分红等——并做空“辣鸡”公司而带来的收益。&br&&br&&b&结果是这两个因子却能很好解释巴菲特的阿尔法。所以我们大概知道巴氏价投的很大一块超额收益来自于投资低beta、相对稳定、且高质量的公司,并且,再加一个不小的杠杆。我们发现巴菲特的业绩不能用价值因子解释,但可以用质量因子解释。所以你看,其实我们嘴上整天叨逼叨的价投,有两种:一种是格老、赛斯·克拉曼倡导的这种 —— 可以称其为价投原教旨主义 —— 只要价值高过价格就可以一战,这种投资方法下,价值因子对超额收益会有深远影响;另一种是巴菲特的“巴氏价投”,他认为投资者值得用公允的价格去投资一个优秀的企业,更强调质量。&/b& &b&此因子分析的结果也验证了这句话是老爷子的肺腑之言 —— “用公道的价格买一个王道的公司要好过用王道的价格买一个公道的公司。”(It's far better to buy a wonderful company at a fair price than a fair company at a wonderful price. 见1987年股东信)。这句话我个人虽然不太敢苟同,但老爷子确实是身体力行、诚不我欺也。&/b&&/p&&img src=&/v2-b8a07c17b_b.jpg& data-rawwidth=&896& data-rawheight=&666& class=&origin_image zh-lightbox-thumb& width=&896& data-original=&/v2-b8a07c17b_r.jpg&&&p&(来源:Buffett's Alpha)&/p&&p&&br&&/p&&p&&b&五、结语&/b&&br&&br&最后我也想来灌点鸡汤——巴菲特的成功,很大程度也来自于五六十年矢志不渝、心无旁骛地在做同一件事情。当然他有一个足可依靠的支持网络,而我认为这个挺重要,一般人也很难具备 —— 比如听说巴菲特在生活上比较低能、饮食起居全依赖妻子服侍。举个例子,每天早上出门老爷子的太太会在他车里面放三个杯子,分别放入$2.61、$2.95 和 $3.17,这分别对应麦当劳的三种汉堡税后的价格。&br&&br&&b&这种心无旁骛一般人很难做到,我要是连续几天不多陪一下女儿,我老婆可能就要请我吃一套独孤九剑。&/b&还有其他一些原因确实是原因但都是显而易见 —— 啥美国GDP的增长啊, 啥老爷子长寿啊,有些人把没有发生第三次世界大战也归入巴菲特成功的因素——正确的废话太多了,你咋不说太阳系没有爆炸这个前提也很重要呢。&br&&br&巴菲特的成功确实是很多因素的完美风暴,有很强的不可复制性。有些人追寻巴氏价投、机缘巧合下赚了点钱,就膨胀了,他们说我要是被播撒在美帝、我要是有个当议院的爹、我要是拜格雷厄姆为师,老子我也能成第二个巴菲特 —— &b&但问题是,装了这个逼,你真的快乐吗?&/b&&/p&&p&&br&&/p&&img src=&/v2-af1d9a1daca_b.png& data-rawwidth=&637& data-rawheight=&635& class=&origin_image zh-lightbox-thumb& width=&637& data-original=&/v2-af1d9a1daca_r.png&&&p&(来源:&a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&)&br&&br&很多人看到上面这张图表示很欣慰,因为他们看到老爷子巨额身家的绝大部分是在52岁以后赚到的,他们觉得自己还年轻;但其没注意的是,年轻时候的老巴起点已然很高——你看他26岁就已经有14万美元,而30岁就有100万美元,而万美元的购买力大概等于现在的800万。就算在财富爆炸的中国,任何一个30岁年轻人——只要不是个X二代 —— 个人净值能达到800万美元(按现在牌价大约是5200多万人民币),都可以算是年轻有为的人杰了,已然实现财务自由。这起点哪能是一般人能及。&br&&br&&b&所以,放弃去复制巴菲特、甚至放弃去复制巴菲特之道,对一个一般的投资者而言,居然可能是一件好事 —— 因为你如何能复制得了呢。&/b&当然老爷子的许多投资思想仍然有极其璀璨的光环,朴素而睿智,很有教育意义;如果你想将一些相对正确的理财投资观教给下一代,确实大可一用。&br&&br&&/p&&img src=&/v2-e1c8dd1d3e1a1a7e5378_b.jpg& data-rawwidth=&602& data-rawheight=&5623& class=&origin_image zh-lightbox-thumb& width=&602& data-original=&/v2-e1c8dd1d3e1a1a7e5378_r.jpg&&&p&&br&&/p&&p&------------------------------------&/p&&p&利益披露:作者持有少量伯克希尔·哈撒韦B股。&br&&br&本文行文仓莽,如有不足之处,还请各位海涵斧正。&br&&br&转载我是欢迎的,但请您署名陈达,在此谢过。 &br&&br&新开微博:陈达美股投资,欢迎关注。 &/p&&p&&br&&/p&&p&&b&最后,这篇是写得真长,感谢您阅读的时间。&/b&&/p&
回答有点长,有缘者阅之。我用了两周的时间来回答这个问题,有时候我回答起问题来的那个拼劲,被我回答过的问题都害怕。为什么,到底巴菲特为什么会成功呢?巴菲特投资成功的真正秘密在哪里? 巴菲特阿尔法的秘密文/陈达 ---------------------------------…
提问者说的这些我都学过,并在硕士阶段攻读其中若干领域。&br&&br&\begin{article}&br&&br&============&b&Keywords&/b&============&br&&br&&br&随机过程 stochastic processes&br&泊松过程 Poisson processes&br&更新过程 renewal processes&br&布朗运动 Brownian motion&br&仿射(跳跃)扩散过程 affine processes (or affine-jump diffusions)&br&列维过程 Levy processes&br&连续状态分枝过程 continuous state branching processes&br&随机微分方程 stochastic differential equations&br&半鞅 semimartingale&br&偏微分方程 partial differential equations&br&偏积分-微分方程 partial integro-differential equations&br&倒向随机微分方程 backward stochastic differential equations&br&二阶倒向随机微分方程 second order backward stochastic differential equations&br&随机偏微分方程 stochastic partial differential equations&br&随机最优控制 stochastic optimal control&br&极值建模 modeling of extremes&br&风险度量 risk measures&br&蒙特卡洛模拟 Monte Carlo simulation&br&&br&============&b&Stochastic Processes&/b&============&br&&br&&b&Introduction and References&/b&&br&&br&『随机过程』(stochastic processes) 是概率论的一个分支,一般来说是特指一个学科,而『蒙特卡洛』 (Monte Carlo) 是一种获得某种统计量、待求值或函数值的方法,二者不太具有明显的并列关系或者包含与被包含关系。&br&&br&随机过程从内容上来说大致有两类:&br&&br&第一种我称之为应用随机过程,也是大家一般所说的随机过程,&br&内容包括几种具体的经典随机过程,例如:Poisson process,renewal process,discrete time and continuous time Markov chain,basics of Brownian motion,以及他们的应用,比如 queue systems 等。&br&&br&相关的书籍有:&br&Stochastic processes, Sheldon Ross&br&另外一本稍微高阶书的是 Cornell University 的“李登辉”教授 (Lee Teng Hui Professor)、应用概率大牛 Sidney Resnick 所著的&br&Adventures in stochastic processes&br&&br&第二种是指随机过程一般理论:一般包括概率论、随机过程的测度论基础 (probability space、convergence theory、limit theory、martingale theory 等),Markov process,stochastic integral, stochastic differential equations, semimartingale theory (半鞅)尤其是后者等比较艰深的概念和问题(内容参考以下书籍);&br&&br&其中入门的书籍有:&br&Stochastic calculus for finance II, Steven Shreve&br&Arbitrage theory in continuous time, Tomas Bjork&br&这两本是与金融交互讲的;另外一本稍微偏理论的随机分析入门书籍是:&br&Stochastic differential equations, Bernt Oksendal&br&高阶数学研究生水平的书籍有:&br&Stochastic integrals and differential equations, Philip Protter&br&Brownian motion and stochastic calculus, Karatzas, Shreve&br&Brownian motion and continuous martingales, Revuz, Yor&br&Limit theorems for stochastic processes, Jacod, Shiryayev&br&一本比较艰深的讲套利数学的研究生读物(需要懂半鞅、泛函分析):&br&Mathematics of arbitrage, Delbaen, Schachermayer,&br&其中讲了不同模型设定下的的套利理论,包括离散模型,连续模型比如半鞅等过程驱动的市场对应的套利结论;utility maximization, convex duality 等概念。&br&&br&当然,学习高级随机分析的书籍需要比较坚实的概率论基础,在此我推荐:&br&Probability: theory and examples, Richard Durret&br&Real analysis and probability, Dudley&br&特别地,我强烈推荐两本我当作参考文献的概率论书籍。一下两本书全面介绍了概率论基本理论,非常适合已经有一定测度背景并且想继续深入学习随机分析的读者:&br&Probability theory: a comprehensive course, Klenke&br&Foundations of modern probability, Kallenberg&br&&br&&b&Overview&/b&&br&&br&『数学金融』中涉及的随机过程应该主要涵盖上述第一类里的几乎所有内容和上述第二类里的stochastic integrals, stochastic differential equations (SDE),semimartingale 等,其中实务中最常用的是 Ito process 和 Levy process;因为他们都有比较好的马尔可夫性 (Markovian structure),根据 Feynman-Kac 等定理,所以又能与 partial differential equation 和 partial
integro-differential equation 联系起来。这也是期权定价的 PDE 方法。讲定价公式可以写成 PDE 的好处是可以使用现成的 PDE 数值方法。&br&&br&此外,Ito processes 和 Levy processes 是特殊的 semimartingale。用 semimartingale 做金融建模的好处有两点:&br&1、semimartingale 作为 stochastic integrator,是从一致度量 (uniform metric) 下可料 (predictable) 被积过程所形成的空间到随机变量 (topologized by convergence in probability) 所形成的空间的连续线性映射,这种性质对应于金融资产价格的稳健性,通俗地讲就是:如果你对投资策略施加一个小小的扰动,最后投资组合的价值在某种意义下也会只有相应较小的扰动。因此用 semimartingale 模拟金融价格是合理的。&br&2、semimartingale 组成的空间在 Emery topology (metrizable) 下是完备的;这个性质加上一个比较符合经济逻辑的无套利假设 (No free lunch with vanishing risk, NFLVR),可以推出存在 sigma-martingale measure,反之亦然;这是目前最广义的套利定价理论,它的特殊形式是:&br&1、在离散模型中,无套利等价于存在等价鞅测度,&br&2、在 Ito processes 中,NFLVR 等价于存在等价局部鞅测度 (equivalent local martingale measure),而 NFLVR 可以推出无套利。&br&这里可以参考 A general version of the fundamental theorem of asset pricing, Delbaen, Schachermayer,慎入,作者均是泛函分析领域的大牛,教过无数顶尖分析和概率领域的学生,写的文章非常艰深;前者也是鄙人所在学校 ETH Zurich 概率论与金融数学组的退休教授,他们的学术成果请自行 scholar.google;笔者的老师用了大约20学时教相关的半鞅知识,20学时教这篇论文)。简而言之,用这两种随机过程模拟价格是可以满足无套利的,因此可以用鞅方法定价,这即是用这两种过程建模的好处之二。&br&&br&在衍生品定价问题中,一般假设 underlying price process 服从例如上述某种随机过程,定价则是利用金融工具的复制(超复制 super-replication)等方法,在特定金融市场的假设(比如无套利,或者更特殊的假设 NFLVR;又比如自由买卖假设;假设很重要!!!)下求得一个该金融工具的无套利价格,以及对应的复制(或超复制)策略。当然(超)复制问题大概涉及两个数学问题,一个是:&br&optional decomposition theorem,这个定理与最广义的 FTAP 有着天然数学美感的交互;另一个是随机控制论中的 stochastic target problem,问题是如何找到一个期初价格和交易策略使得期末 payoff 被(超)复制。 总之,不论在何种方法和假设下,资产定价理论中都用随机过程模拟资产价格。&br&&br&&b&Concrete Examples&/b&&br&&br&Brownian motion,这是搞金融数学不得不懂的随机过程,略,请参考:&br&Stochastic calculus for finance II, Steven Shreve&br&&br&Poisson processes,compound Poisson processes 在金融数学中的应用之一是:在结构定价问题中,我们假设资产过程除了布朗运动驱动的部分之外,还有跳跃,而跳跃经常是由这两种过程模拟的;更一般地,我们还可以假设资产价格过程服从更广义的跳跃形式,该跳跃形式存在于 Levy processes, affine processes 或者 continuous state branching processes 中,一般称作 Levy-type jump 。 Levy processes 可以看做 weak closure of Compound Poisson processes;Levy process 区别于 Brownian motion 和 compound Poisson process 的地方在于,Levy process 还有一项 square integrable martingale,它可以理解为是 intensity 为无穷大、跳跃幅度无穷小(因此有可积性)的 compensated compound poisson,在 Ito-Levy decomposition 中,它是由可数个 compound compensated Poisson processes 组成的。在模型的微分形式中,跳跃和布朗运动驱动的部分经常是线性存在。&br&&br&关于 Levy processes,请参考&br&Introductory lectures on fluctuations of Levy processes, Kyprianou&br&Levy processes and stochastic calculus, Applebaum&br&&br&Renewal processes,Levy processes 经常被用于金融保险中的 Ruin 问题,鉴于这已经超越我的知识范畴,在此不详细讨论,一本可能的参考文献是:&br&Introductory lectures on fluctuations of Levy processes, Kyprianou&br&&br&除衍生工具性定价问题,在金融控制问题中,一般也假设资产过程价格或者其他相关过程服从某种随机过程。比如在最简单的 Merton problem 中,我们假设资产价格服从多维几何布朗运动。又比如在 Jacod 和 Shiryayev 在1993年发表的关于 optimal dividend 的文章中,公司的价值服从一个带线性漂移的布朗运动减去一个左极限右连续的红利支付过程,然后用一个停时 (stopping time) 使其停止于价值首次为0的时刻。&br&&br&随机过程在金融中也可以描述资产价格之外的过程。比如SDE可以描述短期利率,在此请参考&br&Stochastic calculus for finance II, Steven Shreve&br&关于伊藤过程驱动的高级利率模型,比如 affine process,请参考&br&Term structure models: a graduate course, Damir Filipovic&br&&br&随机过程还可以描述除了价格、利率之外的金融变量。比如在著名数理金融学家 Darrel Duffie 写的关于 intensity based credit risk model 的文章中(原文叫 credit risk modeling with affine processes, Duffie),假设 default intensity 服从 affine process,则可违约债券定价形式与短期利率下的债券定价有相同的形式和计算方法,只是将短期利率改写成违约强度而已。&br&关于 affine process,请参考&br&Affine process and applications in finance, Duffie, Filipovic, Schachermayer&br&Transform analysis and asset pricing for Affine jump-diffusions, Duffie, Pan, Singleton&br&以及以上文到的那本讲 Term structure 的书:&br&Term structure models: a graduate course, Damir Filipovic&br&&br&在KMV模型中,假设公司价值服从某个随机过程,比如几何布朗运动。&br&&br&以上这两种随机过程在信用风险中的应用均可以在 Darrel Duffie 的书 Credit Risk: Pricing, Measurement, and Management 中找到。&br&&br&随机过程也可以描述衍生金融工具的价格。比如我们知道欧式期权的 payoff (在这里是期末价值),同时知道 underlying asset price process,我们可以论证欧式期权的价格过程满足倒向随机微分方程 (BSDE);如果underlying asset price processes 满足 Markovian structure,则该 BSDE为一个前向-倒向随机微分方程 (FBSDE);其中方程期末条件是 payoff,方程生成元 (generator) 与 underlying price 相关;方程有一对解,第一个解是期权价格过程,第二个解则对应欧式期权在该市场下的复制策略。如果假设 underlying process 是几何布朗运动,则该 BSDE 为线性 BSDE,其解的形式就是欧式期权的定价公式:风险中性测度下期末值贴现的期望。&br&相关文献请参考:&br&Backward stochastic differential equations in finance: Karoui, Peng, Quenez&br&类似地,BSDE也可以描述效用,称作随机微分效用 (stochastic differential utility),可以参考:&br&Stochastic differential utility, Duffie, Epstein&br&&br&此外 Marek Musiela,Rama Cont,Tomas Bjork,Rene Carmona 等人也尝试过用随机偏微分方程 (stochastic partial differential equations,可以近似理解为用无穷维随机微分方程或 Banach 空间取值的随机微分方程) ;用 SPDE 建模就是用 SPDE 来模拟一个取值为连续函数的 forward rate curve 演化过程。&br&&br&这应该就是 Heath-Jarrow-Morton-Musiela,请参考:&br&Stochastic PDEs and term structure models, Musiela&br&Towards a general theory of bond markets,Tomas Bjork, et al&br&Modeling term structure dynamics: an infinite dimensional approach, Rama Cont&br&Interest rate models: an infinite dimensional stochastic analysis perspective, Rene Carmona&br&&br&当时实务中并不需要这么多高深的数学知识。只要能明白概率论,应用随机过程,随机分析(基本内容一般包括 stochastic integral, SDE,特别是与 Ito processes 相关的内容)就能看懂绝大多数常用模型了。&br&&br&如果是做金融数学学术,则额外还需要专攻以下方向中的一个或多个: Levy process, affine process, backward stochastic differential equations, semimartingale, stochastic control, stochastic differential games, stochastic PDE, 等。&br&&br&除了概率论,金融相关的数学还涉及偏微分方程(及黏性解),控制论,数值分析,统计计量等。&br&&br&============&b&Monte Carlo&/b&===========&br&&br&Monte Carlo 最早是摩纳哥赌场的名字,笔者曾在七月造访。『Monte Carlo』算法一般是指,利用随机抽样的方法,获得一些随机系统的统计量或者参数。比如你有一颗硬币,你想知道掷出后获得正面的概率,那么你通过大量试验以后,可以利用获得正面的频率来估计,这也是中心极限定理的结果。金融中的一个应用是,通过 MC 来模拟多条标的资产的价格走势,代入形式为求概率期望的定价公式就可以求出估计的期权价格的模拟值。此方法则是实现定价的 MC 方法。将扔硬币和 Brownian motion 联系起来的数学定理是 Donsker invariance principle:我们可以想象用硬币反复地大量地投,减小面值 (+\epsilon, -\epsilon),同时减小投币时间间隔 (\delta),那么累积值过程在某种意义下收敛于布朗运动。&br&&br&MC 具体还有很多其他金融应用,比如求某一个风险度量下的风险值。&br&&br&============&b&Machine Learning&/b&===========&br&&br&『机器学习』是一门学科也可以算是方法。我在这领域涉足不深,曾经学习的是主要基于数据、利用回归分析、贝叶斯理论等方法种决策树并用它投票,用以实现模式识别、分类和预测等问题。具体方法有 adaboost,bagging prediction,random forest 等。假设你是银行数据分析师,你有客户的数据,比如年龄,性别,年收入等。如何根据这些数据来简单的构造一个信用分类法则是机器学习的一个简单应用。&br&&br&\end{article}
提问者说的这些我都学过,并在硕士阶段攻读其中若干领域。 \begin{article} ============Keywords============ 随机过程 stochastic processes 泊松过程 Poisson processes 更新过程 renewal processes 布朗运动 Brownian motion 仿射(跳跃)扩散过程 affi…
&p&本文是关于pandas的学习笔记,由于pandas会用到numpy,可能需要读者简单了解一下numpy的内容,不过有用到的部分我会在文中进行简单解释说明。&/p&&p&资料来源主要是两块,一是&a href=&/?target=http%3A//pandas.pydata.org/pandas-docs/stable/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&pandas: powerful Python data analysis toolkit&i class=&icon-external&&&/i&&/a&;另一个&a href=&goog_& data-editable=&true& data-title=&《利用&&《利用&/a&&a href=&/?target=http%3A///s/1sjLUe65& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&python进行数据分析》&i class=&icon-external&&&/i&&/a&(Wes McKinney)&/p&&h2&目录&/h2&&p&一、pandas的安装和使用&/p&&p&二、python数据结构&/p&&p&三、对数据类型的操作&/p&&p&四、总结&br&&/p&&h2&一、pandas的安装和使用&/h2&&p&Pandas和其他python的库安装方式一样,whl、源码或者pip,在此就不赘述了,&a href=&/?target=http%3A//pandas.pydata.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python Data Analysis Library&i class=&icon-external&&&/i&&/a& 上面有github源码和whl文件。&/p&&p&&b&注意:pandas安装会用到numpy库,因此在安装pandas之前一定要安装好numpy。&/b&&/p&&p&Pandas安装的时候还有两个大坑:如果如果是VC++ is required,说明要装Visual Studio,这个百度Visual Studio安装即可;如果是excention is required,比如我碰到的CExcention,说明需要安装对应的拓展包,这个情况可以通过&a href=&/?target=http%3A//www.lfd.uci.edu/%7Egohlke/pythonlibs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python Extension Packages for Windows&i class=&icon-external&&&/i&&/a& 这个网站下载。由于欧皇血统,安装过程不算崎岖,希望踩到其他坑的小伙伴可以多留言让我们整理一下碰到的问题。&/p&&p&Pandas在使用的时候一般会和numpy一起使用,并且官方给pandas简称pd,numpy简称np,原因我就不知道了。&/p&&h2&二、python数据结构&/h2&&p&&b&说明:pandas当中数据类型会具体涉及到int32、int64等等,没有进行设置的时候pandas默认输出64位,如果考虑内存使用效率的话可以自行修改。&/b&&/p&&p&&b&1、Series&/b&&/p&&p&Series可以理解为一个一维的数组,只是index可以自己改动。&/p&&p&创建的方法统一为pd.Series(data,index=)。打印的时候按照index赋值的顺序,有的时候会看着很别扭。某个index对应的值为空就用NaN。&/p&&p&index参数默认从0开始的整数,也是Series的绝对位置,即使index被赋值之后,绝对位置不会被覆盖。&/p&&p&Series可以通过三种形式创建:python的dict、numpy当中的ndarray(numpy中的基本数据结构)、具体某个数值。&b&index赋值必须是list类型。&/b&&/p&&p&Python的dict创建:&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&({&/span&&span class=&err&&‘&/span&&span class=&n&&a&/span&&span class=&err&&’&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&err&&’&/span&&span class=&n&&b&/span&&span class=&err&&’&/span&&span class=&o&&=&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&err&&’&/span&&span class=&n&&d&/span&&span class=&err&&’&/span&&span class=&o&&=&/span&&span class=&mi&&3&/span&&span class=&p&&},&/span&&span class=&n&&index&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&err&&‘&/span&&span class=&n&&a&/span&&span class=&err&&’&/span&&span class=&p&&,&/span&&span class=&err&&’&/span&&span class=&n&&d&/span&&span class=&err&&’&/span&&span class=&p&&,&/span&&span class=&err&&’&/span&&span class=&n&&c&/span&&span class=&err&&’&/span&&span class=&p&&,&/span&&span class=&n&&b&/span&&span class=&err&&’&/span&&span class=&p&&])&/span&
&span class=&err&&输出:&/span&&span class=&n&&a&/span&
&span class=&mi&&1&/span&
&span class=&n&&d&/span&
&span class=&mi&&3&/span&
&span class=&n&&c&/span&
&span class=&n&&NaN&/span&
&span class=&n&&b&/span&
&span class=&mi&&2&/span&
&span class=&n&&dtype&/span&&span class=&err&&:&/span&&span class=&n&&int64&/span&
&/code&&/pre&&/div&&p&numpy中的ndarray:&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&randn&/span&&span class=&p&&(&/span&&span class=&mi&&5&/span&&span class=&p&&),&/span& &span class=&n&&index&/span& &span class=&o&&=&/span& &span class=&nb&&list&/span&&span class=&p&&(&/span&&span class=&s1&&'ABCDE'&/span&&span class=&p&&)&/span&
&span class=&err&&输出:&/span&&span class=&n&&A&/span&
&span class=&o&&-&/span&&span class=&mf&&1.130657&/span&
&span class=&n&&B&/span&
&span class=&o&&-&/span&&span class=&mf&&1.539251&/span&
&span class=&n&&C&/span&
&span class=&mf&&1.503126&/span&
&span class=&n&&D&/span&
&span class=&mf&&1.266908&/span&
&span class=&n&&E&/span&
&span class=&mf&&0.335561&/span&
&span class=&n&&dtype&/span&&span class=&p&&:&/span& &span class=&n&&float64&/span&
&/code&&/pre&&/div&&p&具体某个值:&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&s&/span&&span class=&o&&=&/span&&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&(&/span&&span class=&mi&&5&/span&&span class=&p&&)&/span&
&span class=&err&&输出:&/span&&span class=&mi&&0&/span&
&span class=&mi&&5&/span&
&span class=&n&&dtype&/span&&span class=&p&&:&/span& &span class=&n&&int64&/span&
&span class=&n&&s&/span&&span class=&o&&=&/span&&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&([&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span&&span class=&mi&&4&/span&&span class=&p&&])&/span&
&span class=&err&&输出:&/span&&span class=&mi&&0&/span& &span class=&mi&&5&/span&
&span class=&mi&&1&/span& &span class=&mi&&4&/span&
&span class=&n&&dtype&/span&&span class=&p&&:&/span& &span class=&n&&int64&/span&
&span class=&n&&s&/span&&span class=&o&&=&/span&&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&([&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span&&span class=&mi&&4&/span&&span class=&p&&],&/span&&span class=&n&&index&/span&&span class=&o&&=&/span&&span class=&nb&&list&/span&&span class=&p&&[&/span&&span class=&err&&‘&/span&&span class=&n&&abcd&/span&&span class=&err&&’&/span&&span class=&p&&])&/span&
&span class=&err&&输出:&/span&&span class=&n&&ERROR&/span&
&span class=&n&&S&/span&&span class=&o&&=&/span&&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&(&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span&&span class=&n&&index&/span&&span class=&o&&=&/span&&span class=&nb&&list&/span&&span class=&p&&(&/span&&span class=&err&&‘&/span&&span class=&n&&abcd&/span&&span class=&err&&’&/span&&span class=&p&&))&/span&
&span class=&n&&a&/span& &span class=&mi&&5&/span&
&span class=&n&&b&/span& &span class=&mi&&5&/span&
&span class=&n&&c&/span& &span class=&mi&&5&/span&
&span class=&n&&d&/span&
&span class=&mi&&5&/span&
&span class=&n&&dtype&/span&&span class=&p&&:&/span&&span class=&n&&int64&/span&
&/code&&/pre&&/div&&p&像这种具体某个值的创建方法,保证每行数据精准性的话很麻烦,并且用起来会不小心把其他数据覆盖掉,因此我个人用的比较少。&/p&&p&&b&注意:创建Series的时候要注意创建行数和索引数量匹配的问题&/b&,如果默认的话会自动匹配创建的行数。&/p&&p&除了创建肯定需要查询,这时候会用到s.values和s.index,分别查询值和索引。&/p&&br&&p&&b&2、DataFrame&/b&&/p&&p&DataFrame是一个类似于表格的数据类型,如图:&br&&/p&&p&&img src=&/v2-edfc78282_b.png& data-rawwidth=&327& data-rawheight=&213& class=&content_image& width=&327&&有这样一些参数:&strong&data&/strong& (方框内的数据): numpy ndarray (structured or homogeneous), dict, or DataFrame&/p&&p&&strong&index&/strong&(行索引索引) : Index or array-like&/p&&p&&strong&columns&/strong& (列索引): Index or array-like&/p&&p&&strong&dtype&/strong&(data的数据类型) : dtype, default None&/p&&p&DataFrame可以理解为一个二维数组,index有两个维度,可更改。&/p&&p&DataFrame统一的创建形式为:pd.DataFrame(data,columns=,index=)其中columns为列的索引,index为行的索引。index或者columns如果不进行设置则默认为0开始的整数,也是行的绝对位置,不会被覆盖;而通过外部数据(比如打开文件)创建DataFrame的话需要&b&注意列名匹配的问题&/b&,给columns赋的值如果和数据来源当中列名不一样的话,对应的列下面会出现NAN。还有个常用参数为orient,默认为空,如果赋值’index’则将输入Series的index值作为DataFrame的columns。栗子如下:&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&a&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&read_csv&/span&&span class=&p&&(&/span&&span class=&s1&&'c:/users/15418/Desktop/bajiao.csv'&/span&&span class=&p&&)&/span&
&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&DataFrame&/span&&span class=&p&&(&/span&&span class=&n&&a&/span&&span class=&p&&,&/span&&span class=&n&&columns&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span&&span class=&s1&&'b'&/span&&span class=&p&&,&/span&&span class=&s1&&'commentsNum'&/span&&span class=&p&&])&/span&
&span class=&err&&输出:&/span&&span class=&n&&a&/span&
&span class=&n&&b&/span&
&span class=&n&&commentsNum&/span&
&span class=&mi&&0&/span&
&span class=&n&&NaN&/span& &span class=&n&&NaN&/span&
&span class=&mi&&9795&/span&
&span class=&mi&&1&/span&
&span class=&n&&NaN&/span& &span class=&n&&NaN&/span&
&span class=&mi&&21088&/span&
&span class=&mi&&2&/span&
&span class=&n&&NaN&/span& &span class=&n&&NaN&/span&
&span class=&mi&&4107&/span&
&span class=&mi&&3&/span&
&span class=&n&&NaN&/span& &span class=&n&&NaN&/span&
&span class=&mi&&4115&/span&
&span class=&mi&&4&/span&
&span class=&n&&NaN&/span& &span class=&n&&NaN&/span&
&span class=&mi&&39300&/span&
&/code&&/pre&&/div&&p&Data的创建形式有以下几种:一维数据类型进行创建、二维ndarray创建、外部输入。&/p&&p&二维数组创建,由于比较简单就先说:pd.DataFrame(二维数组,columns = ,index=),由于比较简单就不举代码了。&/p&&p&外部输入就是读取文件等手段,如csv、excel等文件:上面那个例子已经说明了读取文件创建过程。概括来说就是先读取一个文件对象(pd.read_xxx,xxx是对应的文件类型,常用有csv、excel、table等)的对象,然后再通过该对象创建DataFrame,&b&但要注意&/b&&b&columns&/b&&b&列名的命名&/b&。&/p&&p&一维数据类型创建(一维数据类型主要有:一维ndarray、列表、字典、Series等):&/p&&p&首先是字典和Series类型创建DataFrame:一个是将字典或者Series组合成列表进行创建;另一个是将两者放入字典里面创建。例子如下:&/p&&p&第一种方法:&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&a&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s1&&'a'&/span&&span class=&p&&:&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&s1&&'b'&/span&&span class=&p&&:&/span&&span class=&mi&&2&/span&&span class=&p&&}&/span&
&span class=&n&&b&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&([&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&],&/span&&span class=&n&&index&/span&&span class=&o&&=&/span&&span class=&nb&&list&/span&&span class=&p&&(&/span&&span class=&s1&&'abc'&/span&&span class=&p&&))&/span&
&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&DataFrame&/span&&span class=&p&&([&/span&&span class=&n&&a&/span&&span class=&p&&,&/span&&span class=&n&&b&/span&&span class=&p&&],&/span&&span class=&n&&columns&/span& &span class=&o&&=&/span& &span class=&nb&&list&/span&&span class=&p&&(&/span&&span class=&s1&&'abcd'&/span&&span class=&p&&))&/span&
&span class=&err&&输出:&/span&&span class=&n&&a&/span&
&span class=&n&&b&/span&
&span class=&n&&c&/span&
&span class=&n&&d&/span&
&span class=&mi&&0&/span&
&span class=&mi&&1&/span&
&span class=&mi&&2&/span&
&span class=&n&&NaN&/span&
&span class=&n&&NaN&/span&
&span class=&mi&&1&/span&
&span class=&mi&&1&/span&
&span class=&mi&&2&/span&
&span class=&mf&&3.0&/span&
&span class=&n&&NaN&/span&
&/code&&/pre&&/div&&p&第二种方法:&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&a&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s1&&'a'&/span&&span class=&p&&:&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&s1&&'b'&/span&&span class=&p&&:&/span&&span class=&mi&&2&/span&&span class=&p&&}&/span&
&span class=&n&&b&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&([&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&],&/span&&span class=&n&&index&/span&&span class=&o&&=&/span&&span class=&nb&&list&/span&&span class=&p&&(&/span&&span class=&s1&&'abc'&/span&&span class=&p&&))&/span&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s1&&'one'&/span&&span class=&p&&:&/span&&span class=&n&&a&/span&&span class=&p&&,&/span&&span class=&s1&&'two'&/span&&span class=&p&&:&/span&&span class=&n&&b&/span&&span class=&p&&}&/span&
&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&DataFrame&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&,&/span&&span class=&n&&columns&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&s1&&'one'&/span&&span class=&p&&,&/span&&span class=&s1&&'two'&/span&&span class=&p&&,&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span&&span class=&s1&&'d'&/span&&span class=&p&&])&/span&
&span class=&err&&输出:&/span&&span class=&n&&one&/span&
&span class=&n&&two&/span&
&span class=&n&&a&/span&
&span class=&n&&d&/span&
&span class=&n&&a&/span&
&span class=&mf&&1.0&/span&
&span class=&mi&&1&/span&
&span class=&n&&NaN&/span&
&span class=&n&&NaN&/span&
&span class=&n&&b&/span&
&span class=&mf&&2.0&/span&
&span class=&mi&&2&/span&
&span class=&n&&NaN&/span&
&span class=&n&&NaN&/span&
&span class=&n&&c&/span&
&span class=&n&&NaN&/span&
&span class=&mi&&3&/span&
&span class=&n&&NaN&/span&
&span class=&n&&NaN&/span&
&/code&&/pre&&/div&&p&&b&这两种方法都要注意列名匹配的问题。&/b&&/p&&p&然后是数组和列表类型的创建:列表或者一维的ndarray可以通过转化为Series(见1、Series)或者字典进行创建,或者变为对应的二维的数据类型进行处理,在此不佳赘述了。&/p&&p&&b&强烈给个建议:在创建之前最好把data变量先写好然后放到DataFrame方法里面,包括对原始数据的改动也最好写在data里面。&/b&&/p&&p&类似于Series,DataFrame.index,DataFrame.columns可以查询DataFrame二维参数的数值。&/p&&p&&b&3、Panel/PanelND&/b&&/p&&p&Panel可以理解为三维数组,panelND可以理解为N维数组。&/p&&p&高维的数组就是在三维的基础上加入更多维度参数,基本方法相同,具体差异在此就不深入展开,这里以三维为例介绍。&/p&&p&统一的创建方法就是pd.Panel(data,items=,major_axis=,minor_axis=),三个维度就分别是items、major_axis、minor_axis,还有个常用参数就是orient后面会提到。&/p&&p&跟DataFrame类似的,三维参数如果不进行设置则默认为0开始的整数,也是行的绝对位置,不会被覆盖;如果希望把输入的DataFrame的columns作为panel的items就需要吧orient赋值为’minor’。&/p&&br&&p&在创建panel的时候一般会采用两种形式(和DataFrame类似,照搬就行):采用字典;使用items参数创建&/p&&p&具体举例如下:&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&err&&字典:&/span&&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s1&&'Item1'&/span& &span class=&p&&:&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&DataFrame&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&randn&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&)),&/span&
&span class=&s1&&'Item2'&/span& &span class=&p&&:&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&DataFrame&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&randn&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&))}&/span&
&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Panel&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&)&/span&
&span class=&err&&输出:&/span&&span class=&o&&&&/span&&span class=&k&&class&/span& &span class=&err&&'&/span&&span class=&nc&&pandas&/span&&span class=&o&&.&/span&&span class=&n&&core&/span&&span class=&o&&.&/span&&span class=&n&&panel&/span&&span class=&o&&.&/span&&span class=&n&&Panel&/span&&span class=&s1&&'&&/span&
&span class=&n&&Dimensions&/span&&span class=&p&&:&/span& &span class=&mi&&2&/span& &span class=&p&&(&/span&&span class=&n&&items&/span&&span class=&p&&)&/span& &span class=&n&&x&/span& &span class=&mi&&4&/span& &span class=&p&&(&/span&&span class=&n&&major_axis&/span&&span class=&p&&)&/span& &span class=&n&&x&/span& &span class=&mi&&3&/span& &span class=&p&&(&/span&&span class=&n&&minor_axis&/span&&span class=&p&&)&/span&
&span class=&n&&Items&/span& &span class=&n&&axis&/span&&span class=&p&&:&/span& &span class=&n&&Item1&/span& &span class=&n&&to&/span& &span class=&n&&Item2&/span&
&span class=&n&&Major_axis&/span& &span class=&n&&axis&/span&&span class=&p&&:&/span& &span class=&mi&&0&/span& &span class=&n&&to&/span& &span class=&mi&&3&/span&
&span class=&n&&Minor_axis&/span& &span class=&n&&axis&/span&&span class=&p&&:&/span& &span class=&mi&&0&/span& &span class=&n&&to&/span& &span class=&mi&&2&/span&
&/code&&/pre&&/div&&p&这里面的键就是对应items参数,当然panel这个没办法通过表的形式打印。&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&Items&/span&&span class=&err&&参数:&/span&&span class=&n&&df&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&DataFrame&/span&&span class=&p&&({&/span&&span class=&s1&&'a'&/span&&span class=&p&&:&/span& &span class=&p&&[&/span&&span class=&s1&&'foo'&/span&&span class=&p&&,&/span& &span class=&s1&&'bar'&/span&&span class=&p&&,&/span& &span class=&s1&&'baz'&/span&&span class=&p&&],&/span&
&span class=&s1&&'b'&/span&&span class=&p&&:&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&randn&/span&&span class=&p&&(&/span&&span class=&mi&&3&/span&&span class=&p&&)})&/span&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s1&&'item1'&/span&&span class=&p&&:&/span& &span class=&n&&df&/span&&span class=&p&&,&/span& &span class=&s1&&'item2'&/span&&span class=&p&&:&/span& &span class=&n&&df&/span&&span class=&p&&}&/span&
&span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Panel&/span&&span class=&o&&.&/span&&span class=&n&&from_dict&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&,&/span& &span class=&n&&orient&/span&&span class=&o&&=&/span&&span class=&s1&&'minor'&/span&&span class=&p&&)&/span&
&span class=&err&&输出:&/span&&span class=&o&&&&/span&&span class=&k&&class&/span& &span class=&err&&'&/span&&span class=&nc&&pandas&/span&&span class=&o&&.&/span&&span class=&n&&core&/span&&span class=&o&&.&/span&&span class=&n&&panel&/span&&span class=&o&&.&/span&&span class=&n&&Panel&/span&&span class=&s1&&'&&/span&
&span class=&n&&Dimensions&/span&&span class=&p&&:&/span& &span class=&mi&&2&/span& &span class=&p&&(&/span&&span class=&n&&items&/span&&span class=&p&&)&/span& &span class=&n&&x&/span& &span class=&mi&&3&/span& &span class=&p&&(&/span&&span class=&n&&major_axis&/span&&span class=&p&&)&/span& &span class=&n&&x&/span& &span class=&mi&&2&/span& &span class=&p&&(&/span&&span class=&n&&minor_axis&/span&&span class=&p&&)&/span&
&span class=&n&&Items&/span& &span class=&n&&axis&/span&&span class=&p&&:&/span& &span class=&n&&a&/span& &span class=&n&&to&/span& &span class=&n&&b&/span&
&span class=&n&&Major_axis&/span& &span class=&n&&axis&/span&&span class=&p&&:&/span& &span class=&mi&&0&/span& &span class=&n&&to&/span& &span class=&mi&&2&/span&
&span class=&n&&Minor_axis&/span& &span class=&n&&axis&/span&&span class=&p&&:&/span& &span class=&n&&item1&/span& &span class=&n&&to&/span& &span class=&n&&item2&/span&
&/code&&/pre&&/div&&h2&三、对数据类型的操作&/h2&&p&&b&1、对Series操作&/b&&/p&&p&&b&查看&/b&:简单来说就是通过索引查看:一种是通过index对应的标签;另一种就是通过绝对位置查看。&/p&&p&举个例子:&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&(&/span&&span class=&mf&&5.&/span&&span class=&p&&,&/span& &span class=&n&&index&/span&&span class=&o&&=&/span&&span class=&p&&[&/span&&span class=&s1&&'a'&/span&&span class=&p&&,&/span& &span class=&s1&&'b'&/span&&span class=&p&&,&/span& &span class=&s1&&'c'&/span&&span class=&p&&,&/span& &span class=&s1&&'d'&/span&&span class=&p&&,&/span& &span class=&s1&&'e'&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&p&如果通过绝对位置查看,会使用s[XXX],XXX可以是绝对位置的数字,列表,或者表达式等&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&s&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span&
&span class=&err&&输出:&/span&&span class=&mf&&5.0&/span&
&span class=&n&&s&/span&&span class=&p&&[[&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&]]&/span&
&span class=&err&&输出:&/span&&span class=&n&&e&/span&
&span class=&mf&&5.0&/span&
&span class=&n&&d&/span&
&span class=&mf&&5.0&/span&
&span class=&n&&b&/span&
&span class=&mf&&5.0&/span&
&span class=&n&&dtype&/span&&span class=&p&&:&/span& &span class=&n&&float64&/span&
&span class=&n&&s&/span&&span class=&p&&[&/span&&span class=&n&&s&/span&&span class=&o&&&&/span&&span class=&mi&&1&/span&&span class=&p&&]&/span&
&span class=&err&&输出:&/span&&span class=&n&&a&/span&
&span class=&mf&&5.0&/span&
&span class=&n&&b&/span&
&span class=&mf&&5.0&/span&
&span class=&n&&c&/span&
&span class=&mf&&5.0&/span&
&span class=&n&&d&/span&
&span class=&mf&&5.0&/span&
&span class=&n&&e&/span&
&span class=&mf&&5.0&/span&
&span class=&n&&dtype&/span&&span class=&p&&:&/span& &span class=&n&&float64&/span&
&/code&&/pre&&/div&&br&&p&如果通过标签查询的话可以使用s[‘a’]、’e’ in s、或者s.get('f',np.nan)三种方式查看:s[‘a’]返回标签对应数值或者NaN;’e’ in s返回true/false;s.get(‘f’) 返回label对应的值,如果没有读取到就无返回值,加入np.nan参数可在没有读取到时返回NaN。&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&s&/span&&span class=&p&&[&/span&&span class=&err&&‘&/span&&span class=&n&&a&/span&&span class=&err&&’&/span&&span class=&p&&]&/span&
&span class=&err&&输出:&/span&&span class=&mf&&5.0&/span&
&span class=&err&&‘&/span&&span class=&n&&f&/span&&span class=&err&&’&/span& &span class=&ow&&in&/span& &span class=&n&&s&/span&
&span class=&err&&输出:&/span&&span class=&n&&false&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&&span class=&err&&‘&/span&&span class=&n&&e&/span&&span class=&err&&’&/span&&span class=&p&&)&/span&
&span class=&err&&输出:&/span&&span class=&mf&&5.0&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&&span class=&err&&‘&/span&&span class=&n&&f&/span&&span class=&err&&’&/span&&span class=&p&&,&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&nan&/span&&span class=&p&&)&/span&
&span class=&err&&输出:&/span&&span class=&n&&nan&/span&
&/code&&/pre&&/div&&p&&b&运算&/b&:常见操作运算符,+、-、*、/、np.exp以及关系运算等运算符,两个Series运算是其中一个Series中每个index位置和另一个Series对应index位置进行算数运算;也可以选取部分进行运算,在选取部分运算的时候要注意只能运算index相同的部分,不重合的部分则是NaN。&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&s&/span&&span class=&o&&-&/span&&span class=&n&&s&/span&
&span class=&n&&a&/span&
&span class=&mf&&0.0&/span&
&span class=&n&&b&/span&
&span class=&mf&&0.0&/span&
&span class=&n&&c&/span&
&span class=&mf&&0.0&/span&
&span class=&n&&d&/span&
&span class=&mf&&0.0&/span&
&span class=&n&&e&/span&
&span class=&mf&&0.0&/span&
&span class=&n&&s&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&:]&/span&&span class=&o&&+&/span&&span class=&n&&s&/span&&span class=&p&&[:&/span&&span class=&mi&&3&/span&&span class=&p&&]&/span&
&span class=&n&&a&/span&
&span class=&n&&NaN&/span&
&span class=&n&&b&/span&
&span class=&mf&&10.0&/span&
&span class=&n&&c&/span&
&span class=&mf&&10.0&/span&
&span class=&n&&d&/span&
&span class=&n&&NaN&/span&
&span class=&n&&e&/span&
&span class=&n&&NaN&/span&
&/code&&/pre&&/div&&p&&b&命名&/b&:创建的时候使用使用name参数;使用rename方法。可以通过name方法进行查询。&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&pd&/span&&span class=&o&&.&/span&&span class=&n&&Series&/span&&span class=&p&&(&/span&&span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&randn&/span&&span class=&p&&(&/span&&span class=&mi&&5&/span&&span class=&p&&),&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s1&&'something'&/span&&span class=&p&&)&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&name&/span&
&span class=&err&&输出:&/span&&span class=&s1&&'something'&/span&
&span class=&n&&s2&/span& &span class=&o&&=&/span& &span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&rename&/span&&span class=&p&&(&/span&&span class=&s2&&&different&&/span&&span class=&p&&)&/span&
&span class=&n&&s2&/span&&span

我要回帖

 

随机推荐