精华内容
下载资源
问答
  • Brinson多期归因模型的Python实现2.1 基准数据读取模块2.2 持仓数据读取模块2.3 持仓收益与基准计算模块2.4 Brinson多期归因模型核心算法Brinson_Multiple2.5 主函数模块3. 归因结果写在最后 1. 引言 在上文中,...

    【更新日志】
    8/6/2020 对代码中计算择时与择股收益公式的错误进行了修正,并将数据结构框架补充在了附录中


    1. 引言

    在上文中,我们已经介绍了Brinson归因模型的基本思想和基本方法。在这篇文章中,就让我们动起手来实现这一方法吧!

    在Brinson多期归因模型实现的过程中,本文使用模块化方法,将整个实现过程划分为如下五个功能板块:
    Module 1: 基准数据读取模块(功能函数:benchmark_load)
    Module 2: 持仓数据读取模块(功能函数:positions_load)
    Module 3: 持仓收益与基准计算模块(功能函数:w_r_calculation)
    Module 4: Brinson多期归因模型核心算法(功能函数:Brinson_Multiple)
    Module 5: 主函数模块

    注1:由于每个人数据都不一样,因此读者可以仅参考自己认为有用的模块(比如Brinson模型的核心算法)。

    注2:由于本人自己的持仓数据比较敏感,在此仅展示代码实现框架。读者可以将自己的数据稍作处理后套用与本模板。


    2. Brinson多期归因模型的Python实现

    2.1 基准数据读取模块

    # 0. 导入pandas库
    import pandas as pd
    
    # 1. 基准数据读取函数
    '''
    · 函数功能:读取基准数据
    · 输入变量:基准数据存储的地址路径,格式为str
    · 输出变量:基准的权重矩阵和收益矩阵,格式为DataFrame的list
    · 数据样式介绍:
    	1) 基准的权重存储于某xlsx或xls文件中,共有两个sheets,分别命名为"Weights"和"Return";
    	2) 数据的第一列为交易日日期,列名为“日期”,其列格式为“datatime64”;
    	3) 数据表头为各行业名称。
    '''
    def benchmark_load(benchmark_path):
        benchmark_weights = pd.read_excel(benchmark_path, sheet_name='Weights', index_col='日期')
        benchmark_returns = pd.read_excel(benchmark_path, sheet_name='Return', index_col='日期')
        return [benchmark_weights, benchmark_returns]
    

    :除本地导入基准数据外,可以通过API接口直接获取基准数据,如wind数据库、tushare数据库等

    2.2 持仓数据读取模块

    # 2. 读取持仓数据
    '''
    · 函数功能:读取持仓数据
    · 输入变量:持仓数据存储的地址路径,格式为str
    · 输出变量:标准持仓数据,格式为DataFrame,columns为数据名称,index为对应股票的持仓日期
    · 数据样式介绍:
    	1) 全部的持仓数据,包括:持仓股票代码,股票所属行业,持仓日期、市值、当日卖出金额、当日买入金额等;
    	2) 数据表头为各数据名称;
    	3) 原始数据可以不按照交易日先后顺序排列。
    '''
    def positions_load(positions_path):
        pf_data= pd.read_excel(positions_path)
        pf_data.drop_duplicates()  # 数据去重
        pf_data = pf_data[['持仓日期', '市值', '行业', '当日卖出金额', '当日买入金额']]  # 选定需要使用的列
        pf_data['持仓日期'] = pf_data['持仓日期'].astype('datetime64')  # 转化日期格式
        return pf_data
    

    2.3 持仓收益与基准计算模块

    # 3. calculate the weights and the returns of the portfolio
    '''
    · 函数功能:计算所持仓位的权重和收益矩阵
    · 输入变量:
    	1) trading_dates:从基准值提取的交易日信息,格式为list
    	2)  sectors: 从基准中提取行业名称(本码为申万一级),格式为list
    	3) pf_data:使用读取函数读取到的数据
    · 输出变量:持仓的权重矩阵和收益矩阵,格式为DataFrame的list
    '''
    def w_r_calculation(trading_dates, sectors, pf_data):
        # sectors: 从基准中提取行业名称(申万一级)
        # trading_dates 从基准值提取交易日信息
    	
    	# Part 1: 初始化一些存储用的中间变量
        pf_weights = pd.DataFrame(0, columns=sectors, index=td_dates).astype('float') # 存储持仓权重
        pf_values = pd.DataFrame(0, columns=sectors, index=td_dates).astype('float') # 存储所持头寸在各行业在各交易日末的市值
        pf_cin = pd.DataFrame(0, columns=sectors, index=td_dates).astype('float') # 存储所持头寸在个交易日各行业的现金流入情况(卖股)
        pf_cout = pd.DataFrame(0, columns=sectors, index=td_dates).astype('float') # 存储所持头寸在个交易日各行业的现金流出情况(买股)
        pf_r = pd.DataFrame(0, columns=sectors, index=td_dates).astype('float') # 存储持仓收益率
    
    	# Part 2: 计算过程
        for d in td_dates:
            data_sub2 = pf_data[(pf_data['持仓日期'] == d)]
            for s in sectors:
                data_sub1 = pf_data[(pf_data['行业'] == s) & (pf_data['持仓日期'] == d)]
                pf_cin[s][d] = data_sub1['当日卖出金额'].sum()
                pf_cout[s][d] = data_sub1['当日买入金额'].sum()
                pf_values[s][d] = data_sub1['市值'].sum()
                if data_sub2['市值'].sum() + data_sub2['当日买入金额'].sum() == 0:
                    pf_weights[s][d] = 0
                else:
                    pf_weights[s][d] = (pf_values[s][d] + pf_cout[s][d]) / (
                            data_sub2['市值'].sum() + data_sub2['当日买入金额'].sum())
                if td_dates.index(d) > 0 and (pf_values[s][td_dates[td_dates.index(d) - 1]] + pf_cout[s][d]) > 0:
                    pf_r[s][d] = (pf_values[s][d] + pf_cin[s][d]) / (
                            pf_values[s][td_dates[td_dates.index(d) - 1]] + pf_cout[s][d]) - 1
    
        return [pf_weights, pf_r]
    

    2.4 Brinson多期归因模型核心算法Brinson_Multiple

    # 4. build up the Brison Model
    '''
    · 函数功能:Brinson多期模型核心算法,计算组合相对基准的择时收益、择股收益和交互作用
    · 输入变量:
    	1)p_w:组合权重
    	2) p_r: 组合收益
    	3) b_w: 基准权重
    	4)b_r: 基准收益
    · 输出变量:总超额收益、择时收益、择股收益和交互作用收益率,格式为DataFrame
    '''
    def Brinson_Multiple(p_w, p_r, b_w, b_r):
        sectors = list(b_w.columns)  # 从基准中提取行业名称(申万一级)
        td_dates = list(b_w.index)  # 从基准值提取交易日信息
        ticker = ['R_pp', 'R_pb', 'R_bp', 'R_bb']
        cum_R = pd.DataFrame(0, columns=ticker, index=td_dates).astype('float')
        single_R = pd.DataFrame(0, columns=ticker, index=td_dates).astype('float')
    
        for d in td_dates[1:]:
            for s in sectors:
                single_R['R_bb'][d] += b_w[s][d] * b_r[s][d]
                single_R['R_bp'][d] += b_w[s][d] * p_r[s][d]
                single_R['R_pb'][d] += p_w[s][d] * b_r[s][d]
                single_R['R_pp'][d] += p_w[s][d] * p_r[s][d]
    
            for t in ticker:
                for dd in td_dates[0:td_dates.index(d)]:
                    cum_R[t][d] += (cum_R[t][dd] + 1) * single_R[t][td_dates[td_dates.index(dd) + 1]]
    
        Total_Excess_Return = cum_R['R_pp'] - cum_R['R_bb']
        Time_Selection = cum_R['R_pb'] - cum_R['R_bb']
        Stock_Selection = cum_R['R_bp'] - cum_R['R_bb']
        Interactive_Effect = Total_Excess_Return - Time_Selection - Stock_Selection
    
        Outcome = pd.DataFrame(list(zip(Total_Excess_Return, Time_Selection, Stock_Selection, Interactive_Effect)),
                               columns=['Total_Excess_Return', 'Time_Selection', 'Stock_Selection', 'Interactive_Effect'],
                               index=td_dates)
        return Outcome
    

    2.5 主函数模块

    各模块编写好之后,使用如下主函数直接调用即可

    # main part:
    benchmark_path = '你的基准数据存放地址' # 请修改
    positions_path = '你的持仓数据存放地址' # 请修改
    
    # 读取数据
    benchmark = benchmark_load(benchmark_path)
    pf_data = data_load(positions_path)
    
    # 获取基准权重和收益
    b_w = benchmark[0]
    b_r = benchmark[1]
    
    # 提取交易日和行业名称,并作为裂变
    sectors = list(b_w.columns)  # 从基准中提取行业名称(申万一级)
    td_dates = list(b_w.index)  # 从基准值提取交易日信息
    
    # 计算持仓权重和收益
    p_w_r = w_r_calculation(td_dates, sectors, pf_data)
    p_w = p_w_r[0]
    p_r = p_w_r[1]
    
    # 使用Brinson多期模型
    outcome = Brinson_Multiple(p_w=p_w, p_r=p_r, b_w=b_w, b_r=b_r)
    
    # 打印结果,并将结果导出为excel形式
    print(outcome.head())
    path_outcome = '你的文件输出地址' # 请修改
    outcome.to_excel(path_outcome, index=True, header=True)
    

    3. 实证分析

    现以本人的某一权益类持仓账户为例,以日频为收益分解子周期,用上述代码产生的结果进行归因分析。在基准数据的选择中,本人以中证800为基准,并以申万一级行业的超低配作为择时的收益来源,对近两年来的某120个交易日的持仓数据进行归因,归因结果如图1所示:
    Brinson归因结果
    *基准数据来源:Wind数据库

    图1 我的某持仓账户在某半年间各交易日上的 Brinson多期归因分解(为显示简洁日期已做序号化处理。序号0为起始交易日,序号n表示在0-n交易日之间的累计收益情况。其中:蓝色柱子为总累计超额收益,红色柱子为择时收益,绿色柱子为择股收益,紫色柱子为交互作用收益)

    只看最后一根柱子,可以看出在这120多个交易日中,这一账户实现了正的超额收益(如蓝柱部分所示)。其中,大部分收益来自于择股收益(如绿柱部分所示),小部分收益来自于择时收益(如红柱部分所示)。交互作用则贡献了少量的负向收益(如紫柱部分所示)。

    综合整体归因数据来看,这一账户的累计超额收益在前22个交易日中逐渐增厚,后进入下滑和波动阶段,并在第78个交易日开始逐渐回升。择股收益在这120个交易日中一直有着较好的收益贡献(绿柱一直上升),说明账户管理人在行业内股票选择上有相对优势,可以进一步保持;而在择时层面上来看在超额收益下滑这一段时间内产生了较大的负向收益,是拖累总超额收益的主要来源,这说明资产组合在行业配置上存在一定的短板。因此,账户管理人还需要在行业配置能力上做进一步提升。


    附录:数据格式补充说明

    这段时间,有很多小伙伴私信问我数据格式的问题。原始数据比较敏感因此不能在此公开展示(十分抱歉!!!),不过为方便各位小伙伴可以更清楚地了解数据的导入过程,我可以补充展示一下我使用的数据的基本结构和框架,仅供小伙伴们参考~:

    (1)基准数据框架
    本文使用的基准数据框架如附图1所示:
    基准数据
    附图1 基准数据框架

    在这个.xlsx文件中,共有两个sheets,分别命名为Weights和Return,分别存储基准的权重基准的收益率矩阵。本文使用的基准是中证800指数(指数代码000906),所以每一个矩阵中的行和列分别表示每一个申万一级行业每一个归因子周期(本文为日频)在全行业中的权重占比行业收益率

    :也有小伙伴问我行业权重和收益率如何获取。本人在此使用的是收费的WIND数据库,如果有小伙伴有免费开源的数据库可以私信我或者在评论区留言!谢谢!

    (2)持仓数据框架
    本文使用的持仓数据框架如附图2所示:
    在这里插入图片描述
    附图2 持仓数据框架

    在这个.xlsx文件中,只有一个sheet,逐笔记录了每一个归因子周期(本文为日频)的持仓日期所持证券的名称和代码所属行业(需与基准行业名称一致)当期的买入金额和卖出金额。这里多做一点解释:投资者在每一个子周期中可能会进行“做T操作”(比如当日低吸高抛),这一部分的收益需要进行计算,可以参考【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型中子周期收益率的计算公式。

    :在持仓数据框架中既可以按照股票顺序排序,也可以按照持仓交易日排序。因为在组合收益率计算模块中,已经暗含了按基准的交易日进行顺序搜索的操作了。

    如果小伙伴有更为优化的数据格式,欢迎在评论区中交流!


    写在最后

    若想查阅本系列全部文章,请参见目录页:系列文章目录索引

    欢迎感兴趣的小伙伴来跟作者一起挑刺儿~ 包括但不限于语言上的、排版上的和内容上的不足和疏漏~ 一起进步呀!
    有任何问题,欢迎在本文下方留言,或者将问题发送至勘误邮箱: mikeysun_bugfix@163.com

    谢谢大家!

    展开全文
  • 什么是归因模型

    2019-12-04 14:02:48
    归因模型: 从度娘上找来的结果是,在完成转化的路径中,客户可能会进行多次搜索,与同一广告客户的多个广告互动。通过指定归因模型,可以选择为每次点击分配多少转化功劳。也就是说,它可以把转化功劳归于用户的...

    归因模型:
    从度娘上找来的结果是,在完成转化的路径中,客户可能会进行多次搜索,与同一广告客户的多个广告互动。通过指定归因模型,可以选择为每次点击分配多少转化功劳。也就是说,它可以把转化功劳归于用户的首次点击,最终点击或者一组点击等。

    通俗来说,归因模型可以帮助广告主更好的了解投放广告的效果,并优化用户的转化路径。

    可能这样枯燥的解释过于抽象,后面可以举个例子来说明。先说一下归因模型都有啥吧。

    最终点击:将转化功劳全部归于客户最后点击的那个广告和关键字。
    首次点击:将转化功劳全部归于客户最后点击的那个广告和关键字。
    线性:将促成转化的功劳平均分配给转化路径上的所有点击。
    时间衰减:点击越接近转化发生时间,分配的功劳就越多。点击每相隔七天,所分配的功劳就会相差一半。换言之,转化发生 8 天前的点击所获功劳是转化发生 1 天前的点击所获功劳的一半。
    根据位置:为客户首次点击的广告及相应关键字以及最后点击的广告及相应关键字分别分配40%的功劳,将其余20%的功劳平均分配给转化路径上的其他点击。
    以数据为根据:根据转化操作的历史数据来分配转化功劳。(只有当数据充足的时候才可以使用)

    举例来说就很简单了。

    假如说你现在经营了一个名叫“南风”的淘宝店铺,然后你现在想买一款包包。于是你打开了某宝,搜索“包包女”、“斜挎包ins”、“小方包”、“南风家的包”等关键字后,你点击了“南风”家投放的广告,并且买了一款心仪的包包。

    • 如果采用“最终点击”归因模型,那么100%的功劳是属于最后一个关键字“南风家的包”。
    • 如果采用“首次点击”归因模型,那么100%的功劳是属于第一次搜索的关键字“包包女”。
    • 如果采用“线性”归因模型,那么每个关键字平均分配转化功劳,也就是每个关键字都是25%的功劳。
    • 如果根据“时间衰减”归因模型,关键字“南风家的包”将获得最多的转化功劳,因为它最接近转化发生的时间,而“包包女”将获得最少的转化功劳,因为它搜索时间最早。
    • 如果采用“根据位置”的归因模型,那么“包包女”和“南风家的包”将分别获得40%的转化功劳,而“斜挎包ins”和“小方包”分别获得10%的转化功劳。
    • 如果采用“以数据为依据”的归因模型,那么每个关键字将获得部分功劳,具体比例取决于关键字对促成转化的贡献程度。
    展开全文
  • 多渠道归因模型

    千次阅读 2014-02-17 13:29:37
    带着这个问题,看到了Avinash的一篇关于多渠道归因模型的文章,才知道原来多渠道归因有三种模型,以前只知道其中一种,就是跨渠道,例如跨广告,自然搜索,电子邮件,推荐流量等的这种模型,对文章进行了简单的翻译...

    转载自:http://www.szwebanalytics.com/multi-channel-attribution.html

    最近在思考软件程序跟踪多个设备访问的问题,众所周知,在Google Analytics中跟踪一个设备是没有问题,而且很完善,但是在多个设备间切换就不行了,因为设备中都有浏览器,网站分析工具会将cookie放到不同设备的浏览器中,所以cookie就没有办法传递。带着这个问题,看到了Avinash的一篇关于多渠道归因模型的文章,才知道原来多渠道归因有三种模型,以前只知道其中一种,就是跨渠道,例如跨广告,自然搜索,电子邮件,推荐流量等的这种模型,对文章进行了简单的翻译,希望对网站分析同行有帮助,内容如下:

    一个很聪明的人曾经说过:“要保证成功,应该花95%的时间去确定问题的原因,然后花5%的时间去解决。”

    我对这句话深信不疑,在我的生命中,我花了非常多的时间来弄懂问题,并尝试把问题定义清楚。好像有魔法一样,我觉得现在更容易找到比较好的解决方案。

    多渠道归因在网站分析行业是一个非常火的话题,但是却很少人了解它。我相信,由此产生的问题【混乱,FUD(害怕,不确定和怀疑),焦虑,每天祈祷,和浪费预算】是由于缺乏一个明确的多渠道归因框架来帮助界定问题。

    在这篇文章中,我希望分享一个有助于确定问题所在的框架。包括衡量和数据分析的建议。如果这还不够,我会分享关于数字营销归因模型的更多想法。

    这个过程很有趣,卷起你的袖子,带上微笑,清醒一下头脑,然后跟着我出发吧…

    多渠道归因问题的三种类型:

    多渠道归因模型

    关于多渠道归因,会有很多的迷惑和不解,在我们的世界里有三种类型的归因问题。

    一、多渠道归因,线上到实体店(MCA-O2S):

    营销和分析人员尝试去弄懂网络营销和广告的对线下的影响(收入/品牌价值/电话等)。我们把这个归因称为MCA-O2S。

    我这里使用的实体店,它包括以下几种情况:零售商店或公司的呼叫中心的销售(订单或目录请求),人们通过在线活动然后去献血,或者任何因为线上渠道带来的线下收入。

    MCA-O2S的一个例子是Verizon想知道多少线下和线上电话激活是因为在线搜索广告带来的。

    [如果你对这个感兴趣的话,请查看以下这篇文章:1个线上激活的伴随着5个线下激活 !如果不计算带来的线下影响,就相当于不承认线上营销渠道的作用。一般情况下,就会少估5倍的影响!因此你可以想象为什么MCA-O2S归因模型对于地球上的每个公司而言,都是很重要的。]

    这是我用便利贴画的模型图:MCA-O2S,红色圆点代表我们要衡量的活动节点,这些点可以确保我们理解用户行为,并且得到影响我们市场和广告的行动见解…

    多渠道归因-线上到线下

    我经常与首席执行官和首席营销官们讨论,当谈论到多渠道归因的时候,他们总是会说到MCA-O2S。然而,当我的数据分析同行谈论这个话题时,他们却不谈论MCA-O2S,你可以想像,为什么事情会变得混乱,因为两者之间缺少沟通。

    所以,当你遇到一个CEO时,他可能会说:“请帮我解决这个多渠道归因问题”,你会说:“你对哪种MCA模型比较感兴趣?”如果情况是这样的话,就不同了,对问题的进一步明确将有助于促进一个有价值的谈话。

    目前几乎所有关于归因模型的热点和重要文章都没有谈到MCA-O2S。这是因为当涉及到MCA-O2S时,你能想到的解决方案只能是我之前分享的两篇文章,是关于16个策略和控制实验的(例如如Verizon的案例)。

    再推荐两篇多渠道分析的文章:1.跟踪线下广告的线上影响 2.追踪线上广告的线下影响 。

    MCA-O2S是很基础的模型,它的归因建立在实验之上,当你成功使用它的时候,收获会很大!

    二、多渠道归因,跨多个屏幕(MCA-AMS):

    高级领导人,特别是大公司的,当他们说多渠道归因的时候,已经开始提到跨屏幕。

    随着移动手机和平板电脑的大量应用,我们都将变成拥有“四个屏幕”的人(电视,台式机,平板电脑,智能手机)。对于这种复杂的景象,许多高级领导人急于想看懂这种复杂的,混乱的景象,急于理清多渠道归因的头绪。他们指的其实就是MCA-AMS。

    他们真正想要了解清楚的,是用户在使用多个设备体验互联网网站时,通过什么样的媒体(广告及市场推广)和发生了怎样的结果和转换。

    MCA-AMS的一个例子是,假设我在看电视广告的时候,看到了一则广告,然后在我的平板电脑上进行搜索,点击了付费广告后到达了一个相机网站,后来阅读了Nexus S相机的评论,我回到家后,使用我的笔记本在索尼网站上下了一个订单。

    在这种情况下要将销售归功给谁呢?电视,平板电脑付费搜索广告,智能手机上的评论,PC上的下单。有点晕,对吧?

    以下的这张图是关于MCA-AMS的,这个用户体验有点复杂,红色圆点代表的是我们接下来要弄明白的…

    多渠道归因-跨屏幕

    我们面临的挑战主要是,当访客与我们的网站互动的时候,不停地切换设备,去追踪他们变得越来越困难。其实,我不应该说越来越困难,我应该说,几乎是不可能的(cookies,通用特定标识符,隐私,政府等原因)。

    也许唯一的例外,就是用户使用四种设备时都进行了登录,亚马逊和纽约时报都需要用户进行登录。这类公司通常拥有自己的数据仓库,这些数据仓库容量非常大,这样他们就有能力定期做数据挖掘,并确定用户相关的消费习惯和购买模式。通常,但并不总是,他们还可以梳理出不同设备的收入情况(使用Google Analytics高级细分功能的话,5秒钟就可以)和客户分析的渠道推广计划。

    即使这样,它还是很难。对很多人来说这仍然是一个复杂的情况,因为建立数据仓库需要大量的投入,我只能说很抱歉。

    上面两篇文章中的一些想法,可以帮助理解MCA-AMS。

    我相信真正的解决方案将来自cookies的进步,隐私政策的更新,政府的决策和不断变化的用户使用习惯。然后才是我们对数据处理能力。

    通过以上的解释,你可以明白为什么归因模型好像跟MCA-AMS没有什么关系。但是,当你遇到管理人员时,他们可能会说:“请及时解决多渠道的归因问题”,相信这时候大多数人会问更进一步的问题:“你指的是MCA-O2S还是MCA-AMS?”

    MCA-AMS很复杂,是一个很大的挑战。对于大多数人来说,还不是一个迫切的问题,但很多人以后都会碰到。

    三、多通道归因,跨渠道(MCA-ADC):

    觉大多数,在网络营销的圈子里谈到的多通道归因(不是首席执行官和首席营销官),指的都是以下的这个模型。

    MCA-ADC是理解数字营销渠道(社交媒体,展示广告,YouTube,推荐来源,电子邮件,搜索等等)的模型,归因于一个特定的转换或者多个转换。

    目前所有的网站分析工具,例如Adobe SiteCatalyst,WebTrends,Google Analytics,Coremetrics等,会将转换归属到转换前的最后一次接触的渠道,也就是为人们所熟知的【归因到最后点击】。

    有了MCA-ADC,你会试图跳出最后一次点击的思维,而是会考虑转换前的所有渠道(请看以下Google Analytics的例子):

    多渠道归因-转换路径

    对于这个网站,767次的转换来自同一种路径类型:首先起始于社交媒体网站(例如Facebook, Twitter),然后直接访问网站,然后通过自然搜索到达网站,然后通过推荐网站再次进入,最后产生订单的是直接流量的点击。

    数字营销的人员都迫切地想要了解以上转换中,权重是如何计算和分配的。直接流量应该获得50%吗?社交媒体呢?100%?自然搜索呢?2%?但是当我们明白了一个很关键的,隐藏的,细微的差别后,得把我们把刚才的想法先放一放。

    当人们谈论MCA – ADC时,他们只是在讨论使用一台设备时的情况。因为网站分析工具去分析一个人使用不同屏幕(Across Multipe Screens – AMS)的情况是不太可能的。

    所以你上面看到的转换,网站分析工具都可以将网站内容和一个浏览器的多个访问联系起来(请注意,是浏览器而不是人)顺便说一句,GA真是太棒了,因为其它大部分工具都没有能力可以告诉你。

    假设以上的自然搜索在手机中产生……不管使用了什么网站分析工具,对于大多数网站来说,访问基本上是丢失的,因为cookie记录在手机的浏览器上,而一部分cookie则记录在电脑的浏览器上,oh my god.

    在cookies,ids,隐私政策,政府指导和用户使用习惯问题没有得到充分解决之前,区分MCA-AMS (across multiple screens,跨多个屏幕) 和 MCA-ADC (across digital channels,跨多个渠道)是很重要的。

    当衡量MCA-AMS的时候,你可以使用上一节中提到的指导。对于MCA- ADC,你会使用一组不同的报告,分别是多渠道路径和归因模型。

    我敢肯定,当涉及到MCA – ADC的时候,你已经弄懂了第二个差别。

    以上的情形没有追踪和考虑到线下用户行为的影响(O2S),网站分析工具在这方面不是很行,甚至可以说很差。

    所以额外的3,835人在商店中或者通过手机渠道(采用上面Verizon的数字)购买是可能的。上述的所有渠道,不管是社交媒体,直接流量,搜索流量,还是推荐流量,都不会获得“权重”。除非你愿意使用在MCA-O2S中所描述的方法。

    当你在说MCA – ADC的时候,确保你自己清楚,并且和领导沟通清楚,不是在说MCA-O2S(Online to Store),同时也不是在讨论MCA-AMS。

    以下是最后的一张便利贴,红色远点是当你在尝试MCA – ADC时最可能测量的节点:

    多渠道归因

    如果我想卖弄学问的话,我会说这是MCA-ADCFOD模型(Multi-channel attribution across digital channels for one device),意思就是一台设备跨渠道的多渠道归因模型。

    现在有丰富的分析经验,时间,耐心和上帝的祝福,可以做完整的多渠道归因分析了,多渠道包括多个线上广告渠道,跨设备的用户行为,线上和线下的影响。可惜的是,整体上而言非常难。我说的非常难,基本上就是不可能的意思。当我说几乎是不可能的,我指的是当你知道如何解决广告,线上和线下内容,客户之后的尝试。

    我知道这听起​​来像无稽之言,但是这种讨论的确需要回归现实。有太多的虚假承诺,来自供应商,咨询顾问,微博爱好者,领袖和各路神仙,这对于整个网络营销生态系统是没有帮助的。

    MCA-ADC的简单总结:

    下一次当你听到有人提到多渠道归因的时候,你应该用你最温和的语气说:“您指的是MCA-O2S, MCA-AMS还是MCA-ADC?”

    你会赢得其他人的尊重,因为你知道有三种类型,并且你可以理解他们所说的情形,然后进行进一步的讨论,相信这些讨论对职业生涯甚至商业嗅觉都会有一些提升。

    多通道归因模型

    对于MCA-O2S和MCA-AMS,它是一项复杂的工作,需要确定“哪种广告/营销手段能获得更多权重。”它需要耐心和技巧,它也需要你对16个策略的执行能力,这些策略包括线上和线下对各自的影响。甚至,它需要一种能力(人+技能+欲望)去进行实验。

    所以这个问题:“谁获得多少权重”的优先级会降低。

    有了MCA-ADC,任务会容易得多,我们有多渠道路径报告。此外,我们能够在一些工具中对MCA-ADC部分提到的行为(以上两张图片)运用归因模型。

    最简单的网站分析工具也会有最常见的归因模型:最后点击,第一次点击,甚至分配。

    如果你足够幸运,你能够使用更复杂和高级的工具,将会包括:基于数学算法的,能够调整的时间衰减模型。

    如果你更幸运,你将有可能获得一个数字分析工具,它允许你创建一个定制的归因模型。

    这些模型应用于MCA – ADC,并为您提供更好的关于数字媒体花费的建议。

    这些模型都有自己的优点和缺点,如果你有我的书的Web Analytics(分析)2.0,请翻到到358页,有些有更多的缺点,几乎没有任何优点,记得一定要规避它们。

    其中一些通过了基础的测试,因此相对于停留在【归因到最后点击】的思维,会把你提升到一个更高的层次上。

    但是弄懂这些模型的一个最大的好处就是,可以给你关于如何调整媒体花费的直接指导。(将美元、欧元、比索从付费搜索转移到展示广告,或者从展示广告到电子邮件,或者其他组合)

    成功是通过策略的不断调整,不断测量变化,逐步改善才能达到的(几个礼拜,如果你公司比较小的话甚至几周)

    如果你恰巧在一家大公司,假设你在网络营销的花费在10万美元以上,你很快就会发现你在多渠道归因中所犯的错误会较少,并且你的问题会集中在“我如何权衡我的网络营销组合”,而不是“谁得到更多的权重”。

    这将推动你继续研究解决方案,这个解决方案需要独特的个人能力和不死的欲望去测量不能想象的模型。

    当你达到这种阶段的时候,你将拥有声誉,财富和幸福。

    胜利

    多渠道归因:总结

    这是一个严峻的挑战,因为现实是复杂的。

    客户体验是以往任何时候都更加复杂,影响的渠道很多,内容消费很分散,三步走模型(吸引,获取,保留)现在分解成很多不同的部分。

    所以,你没有选择。如果想让您的公司有一个有效的广告和营销策略,你必须处理多渠道归因的三个问题。

    以下是一些好消息:你不需要一气呵成。事实上,如果你试图这样做,可能会损害你的健康(虽是玩笑,但事实的确是这样)。你应该采取渐进的步骤,步步为营。

    以下就是我的建议:

    1. 首先得明确,你在解决管理团队的什么问题。O2S,AMS,还是ADC。

    2. 使用适当的解决方案。

    3. 真的要把多渠道路径报告弄懂,他们都是免费的,他们很棒。使用概述报告中的维恩图,并将真实的情况展示给你的管理团队。他们会欣赏你的杰作,并且停止浪费金钱。

    4. 开始使用简单的模型进行试验。您会从最后点击的归因思维中跳出来,并且放弃。花一些精力在时间衰减归因模型上(理想的情况是运用几种数学模型)。

    5. 做实验,并且感受不同组合的变化

    6. 追踪结果,分析数据,改变变量后再进行尝试。

    7. 一旦掌握后,慢慢转移到媒体组合的实验。

    如果在任何一步,你注意到利润率的递减,回到前面的步骤,进行优化,直到值得公司投入更多的钱在下一个步骤中。

    如果你理解了框架,如果你了解内在的挑战,如果你能够把公司存在的问题定义清楚,并且按照上面的框架采取进一步的行动,得到的将是令人满意的结果,人家会说你很棒。

    一如既往,现在轮到你说话了。

    你的公司正在解决什么样的多渠道归因问题?你明白了上面三个模型的区别吗?有没有在这篇文章中未涉及的第四个模型呢?你觉得哪一个是最具挑战性的?你对我们会解决的AMS(跨多个屏幕)的问题感到比较乐观吗?你信奉那种MCA – ADC归因模型?谁是你永远的朋友(BFFS)?

    请通过评论分享您的想法,反馈,批判,和很棒的想法。谢谢!

    原文地址是:http://www.kaushik.net/avinash/multi-channel-attribution-definitions-models/

    有些专业术语说明下:

    FUD:Fear, uncertainty and doubt 的缩写,指的是害怕,不确定和怀疑

    BFFS: Best Friend forever, 朋友,引申为解决方案

    MCA-O2S: Multi-Channel Attribution, Online to Store,指的是多渠道归因,线上到实体店

    MCA-AMS: Multi-Channel Attribution, Across Multiple Screens, 指的是跨多个设备,跨多个屏幕

    MCA-ADC: Multi-Channel Attribution, Across Digital Channels,指的是跨渠道,例如广告,SEO,电子邮件,推荐流量等

    展开全文
  • 文章目录1. 引言2. 模型介绍2.1 CAPM模型2.2 T-...详情请见:【基金量化研究系列】基金绩效归因模型(一)——Brinson多期归因模型简介。然而,Brinson多期归因模型在使用时需要使用每一个子周期的具体持仓信息(在各行


    1. 引言

    在前一篇文章中,我们对某只基金的超额收益来源进行了分解,分解成了择时、择股与交互作用三个部分。详情请见:【基金量化研究系列】基金绩效归因模型(一)——Brinson多期归因模型简介。然而,Brinson多期归因模型在使用时需要使用每一个子周期的具体持仓信息(在各行业或各类资产之间资金的流入流出和仓位数据),因此该模型的应用对象更偏向于自有的持仓组合。然而,对于一般的公募基金而言,我们是无法及时通过公开渠道获取其持仓信息的:市场上一般的公募基金只能获取其每日的净值数据以及日收益率数据,因此我们需要使用适用范围更广泛的归因模型。那么,我们能不能仅根据收益率数据和净值数据对一只公募基金的基金管理人的业绩进行归因呢?本文就来探讨一下这个问题。

    在建立模型之前,我们先对一些可能用到的指标进行说明:

    指标 含义
    rp 投资组合收益率
    rm 市场组合(基准)收益率
    rf 无风险利率
    rpex 投资组合超额收益 (rp - rf
    rmex 市场组合超额收益 (rp - rm

    2. 模型介绍

    2.1 CAPM模型

    资本资产定价模型(Capital Asset Pricing Model,CAPM) 是由威廉·夏普(William Sharpe)等人构建的单因子模型。利用CAPM模型,我们可以将组合的超额收益分解为来自于市场风险敞口的收益 β 和组合特异性收益(非市场收益) α :
    rprf=α+β(rmrf)+ϵ r_p - r_f= \alpha + \beta(r_m - r_f) + \epsilon
    其中,β 表示组合在市场中暴露的风险敞口;
    α 表示组合无法由市场风险解释的,或者说由个股选择带来的超额收益。

    因此,若某只组合或基金的 α 显著大于0,则意味着基金管理人具有正向的择股能力

    2.2 T-M模型

    T-M模型(Treynor-Mauzy Model) 是由特雷诺(Treynor) 和 玛泽(Mauzy)两人在CAPM模型框架的基础上增加了市场超额收益的二阶项,模型表达式如下:

    rprf=α+β1(rmrf)+β2(rmrf)2+ϵ r_p - r_f= \alpha + \beta_1(r_m - r_f) + \beta_2(r_m - r_f)^2 + \epsilon

    可以看出:若 α 显著大于0,则说明基金管理人具有正向的择券能力;若 β2 显著大于0,则说明基金管理人具有正向的择时能力

    2.3 H-M模型

    H-M模型(Henriksson-Merton Model) 是由亨利克逊(Henriksson) 和 莫顿(Merton)两人在1981年提出的归因模型,该模型是在T-M模型的基础上进行了改进,模型表达式如下:

    rprf=α+β1(rmrf)+β2(rmrf)Irm>rf+ϵ r_p - r_f= \alpha + \beta_1(r_m - r_f) + \beta_2(r_m - r_f)I_{r_m > r_f} + \epsilon
    其中:
    Irm>rf={1如果 rm>rf0其他 I_{r_m > r_f} = \begin{cases} 1 &\text{如果 } r_m > r_f \\ 0 &\text{其他} \end{cases}

    为一示性函数。

    可以看出:若 α > 0,则说明基金管理人具有正向的择券能力;若 β2 > 0,则说明基金管理人具有正向的择时能力

    2.4 C-L模型

    H-M模型(Chang-Lewellen Model) 是由畅(Chang) 和 乐维伦( Lewellen)两人在1984年提出的归因模型。模型表达式如下:
    rprf=α+β1(rmrf)Irm<rf++β2(rmrf)Irm>rf+ϵ r_p - r_f= \alpha + \beta_1(r_m - r_f)I_{r_m < r_f} + + \beta_2(r_m - r_f)I_{r_m > r_f} + \epsilon

    可以看出:若 α > 0,则说明基金管理人具有正向的择券能力;若 β2 > β1,则说明基金管理人具有正向的择时能力

    2.5 H-M模型 V.S. C-L模型

    首先,我们对C-L模型做转化:
    rprf=α+β1(rmrf)Irm<rf++β2(rmrf)Irm>rf+ϵ r_p - r_f= \alpha + \beta_1(r_m - r_f)I_{r_m < r_f} + + \beta_2(r_m - r_f)I_{r_m > r_f} + \epsilon =α+β1(rmrf)(1Irm>rf)+β2(rmrf)Irm>rf+ϵ = \alpha + \beta_1(r_m - r_f) (1 - I_{r_m > r_f} )+ \beta_2(r_m - r_f)I_{r_m > r_f} + \epsilon =α+β1(rmrf)+(β2β1)(rmrf)Irm>rf+ϵ = \alpha + \beta_1(r_m - r_f) + (\beta_2 - \beta_1)(r_m - r_f)I_{r_m > r_f} + \epsilon

    因此,我们发现C-L模型中的 β2 - β1 实际上与H-M模型的 β2是等价的,这与我们在模型中对择时能力的定义是一致的。因此,从这个角度来说H-M模型和C-L模型是等价的。


    3. 实证分析

    3.1 数据选择

    本文选用作者的某一只持仓,时间跨度为2020年2月4日-2020年5月12日共42个交易日的持仓数据。基准为沪深300ETF日收益率,无风险利率选用沪市七天逆回购利率R-007。具体数据如下图所示:
    在这里插入图片描述
    图1 日收益率、无风险利率与基准利率数据一览表


    3.2 python代码块

    本文使用python的statsmodels包进行模型拟合。

    除statsmodel包以外,也可以选择使用sklearn包进行模型训练,本文已在代码块中以注释的形式给出了基于sklearn包中LearRegression的使用方法。

    # -*- coding: utf-8 -*-
    # author: Mikey_Sun time: 5/30/2020
    # all copyright belongs to the author. NO COPY ALLOWED.
    
    import pandas as pd
    import statsmodels.api as sm
    
    # Step 1: 导入rp, rf和rm的收益率序列(已做数据清洗)
    path = '你的数据存储地址' # 输入你的数据存储地址
    data = pd.read_excel(path) #读取数据
    pd.set_option('mode.chained_assignment', None)
    
    # Step 2:构造所需要的模型
    data['Ex_Rm'] = data['Rm'] - data['Rf']
    data['Ex_Rp'] = data['Rp'] - data['Rf']
    data['sqr_Ex_Rm'] = data['Ex_Rm']**2
    data['Ex_Rm+'], data['Ex_Rm-'] = data['Ex_Rm'].copy(), data['Ex_Rm'].copy()
    for i in data.index:
        if data['Ex_Rm'][i] >= 0:
            data['Ex_Rm+'][i] = data['Ex_Rm'][i]
            data['Ex_Rm-'][i] = 0
        else:
            data['Ex_Rm-'][i] = data['Ex_Rm'][i]
            data['Ex_Rm+'][i] = 0
            
    print(data.head())
    
    # Step 3: 模型输入-输出变量准备
    y = data[['Ex_Rp']]  # 模型输出变量矩阵
    X_CAPM = sm.add_constant(data[['Ex_Rm']])  # CAPM模型输入变量矩阵
    X_TM = sm.add_constant(data[['Ex_Rm', 'sqr_Ex_Rm']]) # T-M模型输入变量矩阵
    X_HM = sm.add_constant(data[['Ex_Rm', 'Ex_Rm+']]) # H-M模型输入变量矩阵
    X_CL = sm.add_constant(data[['Ex_Rm-', 'Ex_Rm+']]) # C-L模型输入变量矩阵
    
    # Step 4: 模型训练
    CAPM = sm.OLS(y, X_CAPM).fit() # CAPM拟合模型
    TM = sm.OLS(y, X_TM).fit() # T-M拟合模型
    HM = sm.OLS(y, X_HM).fit() # H-M拟合模型
    CL = sm.OLS(y, X_CL).fit() # C-L拟合模型
    
    
    # Step 5: 输出结果
    print(CAPM.summary())
    print(TM.summary())
    print(HM.summary())
    print(CL.summary())
    
    
    '''
    ########################
    ########## 注 ##########
    ########################
    # 也可以使用Sklearn包进行归因分析。代码如下:
    from sklearn.linear_model import LinearRegression as LR
    CAPM, TM, HM, CL = LR(), LR(), LR(), LR()
    # 模型训练
    CAPM.fit( data[['Ex_Rm']], data[['Ex_Rp']] )
    TM.fit( data[['Ex_Rm', 'sqr_Ex_Rm']], data[['Ex_Rp']] )
    HM.fit( data[['Ex_Rm', 'Ex_Rm+']], data[['Ex_Rp']] )
    CL.fit( data[['Ex_Rm-', 'Ex_Rm+']], data[['Ex_Rp']] )
    '''
    

    3.3 输出结果与分析

    模型的输出结果如表1所示:

    表1 四种模型对某持仓净值的参数估计量汇总表

    模型名称 α pα β1 pβ1 β2 pβ2 R2
    CAPM 0.0010 0.00 0.9488 0.05 - - 0.85
    T-M 0.0019 0.03 0.9420 0.00 -3.8873 0.03 0.86
    H-M 0.0028 0.01 1.1166 0.00 -0.3275 0.02 0.86
    C-L 0.0028 0.01 1.1166 0.00 0.7891 0.00 0.86

    从表1可以看出,不论是使用何种模型,都可以得出:该组合管理人在上述68个收益日中具有正向的择股能力(α > 0)和负向的择时能力。因此择股能力是该基金管理人的强项,但是择时能力是该基金管理人的短板。因此,该基金管理人应该再择时能力上再做进一步提升。


    写在最后

    若想查阅本系列全部文章,请参见目录页:系列文章目录索引

    欢迎感兴趣的小伙伴来跟作者一起挑刺儿~ 包括但不限于语言上的、排版上的和内容上的不足和疏漏~ 一起进步呀!
    有任何问题,欢迎在本文下方留言,或者将问题发送至勘误邮箱: mikeysun_bugfix@163.com

    谢谢大家!

    展开全文
  • 多渠道归因模型

    2012-10-05 16:18:27
    带着这个问题,看到了Avinash的一篇关于多渠道归因模型的文章,才知道原来多渠道归因有三种模型,以前只知道其中一种,就是跨渠道,例如跨广告,自然搜索,电子邮件,推荐流量等的这种模型,对文章进行了简单的翻译...
  • 网站数据分析:多渠道归因模型

    千次阅读 2014-11-06 21:53:40
    l 众所周知,在Google Analytics中...带着这个问题,看到了Avinash的一篇关于多渠道归因模型的文章,才知道原来多渠道归因有三种模型,以前只知道其中一种,就是跨渠道,例如跨广告,自然搜索,电子邮件,推荐流量等
  • 在市场营销中,归因是指在一个Customer Journey 中,对达到最终预期转化(或完成目标)的不同营销渠道(不同用户接触点)的价值识别。这么做的好处是能够发现不同渠道...营销归因模型使内容营销人员能够更准确地理解
  • 如何建设公司级统一口径转化导流分析数据,满足多个业务对转化数据的需求,为公司各业务部门提供转化分析数据(各入口或者页面带来的商家、活动页、预定、订单),基于此我们设计了转化归因来满足业务需求。...
  • ChannelAttribution包含一个归因问题的概率算法。 该模型使用k阶马尔可夫表示法来识别客户旅程数据中的结构相关性。 该库还包含针对同一问题的三种启发式算法(首次触摸,最后触摸和线性触摸方法)。 该算法以C ++...
  • 文章目录1 归因分析2 传统归因分析方法2.1 传统归因分析2.2.1 最终互动归因模型2.2.2 最终非直接点击归因模型2.2.3 最终AD点击归因2.2.4首次互动归因2.2.5 线性归因模型2.2.6 时间衰减归因模型2.2.7 位置归因模型...
  • 正确使用模型评估、模型选择和算法选择技术无论是对机器学习学术研究还是工业场景应用都至关重要。本文将对这三个任务的相关技术进行回顾,并就每种技术的理论和实证研究的主要优缺点进行讨论。文章还将就机器学习...
  • 作者:Sebastian Raschka翻译:reason_W编辑:周翔简介正确使用模型评估、模型选择和算法选择技术无论是对机器学习学术研究还是工业场景应用都至关重要。本文将对这三个任务的相关技术进行回顾,并就每种技术的理论...
  • 三个案例研究:用于估计的随机矩阵理论与用于归因的横截面模型; 基于完全重新定价而不是 Black-Scholes deltas 的对冲; 最佳K归因/对冲因子的启发式算法 要遍历代码并获得详尽的描述,请参见Meucci A.,“按需因素...
  • brinson算法单期归因算法很好理解,但多期归因就稍微有点复杂,网上资料大多是摆...笔者结合网上资料及券商研报,拉了一个excel表,对多期归因的三种方法(AKH算法、每期调整算法、Carino模型)分别作了演算和对比。
  • 作者|王言治,美国东北大学电子与计算机工程系助理教授出品|AI科技大本营(ID:rgznai100)近年来,机器学习(Machine Learning)...但与此同时,新的问题也随之而来,机器学习模型变得更加庞大复杂,因实时性而对算力...
  • 一、活跃度驱动模型引入 学习复杂网络的学生对这个模型应该很熟悉了,这是一个近些年非常值得关注的网络模型,如果你正打算学习时序网络,那么你必须得看一下这篇论文 《Activity driven modeling of time varying...
  • 利用统计学习,我们试图从观测数据中...首先,这将帮助我们理解因果推理的问题有多困难,其中潜在的模型不再是一个固定的随机变量联合分布,而是一个包含多个这样的分布的结构。第二,尽管有限样本结果的因果估计是稀
  • 作者:江嘉键 ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...前一段时间,李腾、陈烨、邓岳、陈志岗几位老师在知乎上发布了一份多因子模型的测试题,其中囊括
  • 11、思考: 1、重点是文中提出使用Nelder-Mead算法的信道估计模型,从而使得进行室内瑞利信道的估计成为可能; 2、通过估计得到信道环境、通道系数、时间偏移可以获知当前OFDM网卡所处的环境状态,从而通过信道补偿...
  • 基本上所有的CVR模型都会遇到重复点击,都会遇到延迟上报转化或者激活等数据。所以后面总结都会很有针对性。 1.筛选特征测试特征前,先对特征做分析,覆盖度分析,以及看特征不同取值下对转化率的影响。差别越大....
  • 归因理论

    万次阅读 2015-08-17 12:26:16
    一、归因的基本概念   归因指个体对自己或他人的行为的原因加以解释和推测的过程。归因是一种非常普遍的现象,例如,上课时有一位学生迟到了,这时,大家都会对这个事件作出解释,有的人会想,他可能是睡过头了;有...
  • cps归因_归因及其应用

    2020-10-10 20:45:36
    cps归因TL; DR(TL;DR) Imputation is the process of inferring unknown data. It has useful applications in model validation, data preprocessing, and generative modeling. When dealing with sequential data...
  • 4. 局部特征归因方法(对每个客户的预测提供解释) 1)Tree SHAP 2)Saabas 3)mean Tree SHAP 4)Gain:特征用于划分时所带来的训练损失减益的平均值 5)Split Count:特征用户划分的次数 6)Permutation:当随机...
  • 这种独特的现象归因于三个原因: 1.智能手机本身具有超高的能量效率。智能手机芯片使用最先进的技术(例如7nm,11nm技术)构建;而FPGA / ASIC解决方案则基于28nm或40nm技术--这些技术本身节能效果较差。同样,ARM...
  • 控制算法和编程算法 重点 (Top highlight)“Being good is easy, what is difficult is being just.” ― Victor Hugo “做善事容易,而做困难就是正义。” ― 维克多·雨果 “We need to defend the interests of ...
  • 算法之美

    千次阅读 2018-08-14 00:44:39
    因此,在探索研究方便人类生活的算法时,我们还与过去50年最著名的算法专家进行了交流,询问这些全世界最聪明的人,他们的研究对他们自己的生活(包括寻觅配偶、收拾衣帽鞋袜)到底产生了什么样的影响? 接下来,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,406
精华内容 1,362
关键字:

归因模型算法