博客專欄

EEPW首頁(yè) > 博客 > 九章云極DataCanvas YLearn因果學(xué)習(xí)開(kāi)源項(xiàng)目:從預(yù)測(cè)到?jīng)Q策

九章云極DataCanvas YLearn因果學(xué)習(xí)開(kāi)源項(xiàng)目:從預(yù)測(cè)到?jīng)Q策

發(fā)布人:機(jī)器之心 時(shí)間:2022-07-21 來(lái)源:工程師 發(fā)布文章

圖靈獎(jiǎng)得主 Judea Pearl 曾表示,現(xiàn)有的機(jī)器學(xué)習(xí)模型不過(guò)是對(duì)數(shù)據(jù)的精確曲線擬合,只是在上?代的基礎(chǔ)上提升了性能,在基本的思想方面沒(méi)有任何進(jìn)步。


根據(jù)福布斯的統(tǒng)計(jì)數(shù)據(jù),全球范圍只有 13% 左右的機(jī)器學(xué)習(xí)項(xiàng)目能夠真正上線運(yùn)行,項(xiàng)目失敗的一個(gè)重要原因是模型的泛化能力不足,在真實(shí)數(shù)據(jù)上的表現(xiàn)和完全達(dá)不到訓(xùn)練數(shù)據(jù)上的效果。

隨著機(jī)器學(xué)習(xí)建模越來(lái)越多的應(yīng)用,企業(yè)對(duì)人工智能的要求也在進(jìn)一步提高。近幾年提及的「數(shù)智化」核心是智能決策,以數(shù)據(jù)驅(qū)動(dòng)的方式實(shí)現(xiàn)自動(dòng)化決策來(lái)提高整體運(yùn)營(yíng)效率。用戶的需求的重心從預(yù)測(cè)性分析向指導(dǎo)性分析升級(jí)轉(zhuǎn)移,預(yù)測(cè)性分析是告訴企業(yè)未來(lái)可能會(huì)發(fā)生什么,指導(dǎo)性分析也叫處方性分析,是告訴企業(yè)我們?nèi)绻胍獙?shí)現(xiàn)一個(gè)目標(biāo)需要如何做,這是典型的智能決策問(wèn)題。
機(jī)器學(xué)習(xí)主要用在預(yù)測(cè)性分析上,基本上沒(méi)有能力解決指導(dǎo)性分析這樣的決策問(wèn)題,因此,因果學(xué)習(xí)正被學(xué)界和業(yè)界逐漸重視起來(lái),其可以補(bǔ)充機(jī)器學(xué)習(xí)的一些短板,也滿足了智能決策這類問(wèn)題的需求。因果推斷的重要性逐漸顯示,被認(rèn)為是人工智能領(lǐng)域的一次范式革命。
7 月 12 日,九章云極 DataCanvas 發(fā)布了 YLearn 因果學(xué)習(xí)開(kāi)源項(xiàng)目,是全球首款一站式處理因果學(xué)習(xí)完整流程的開(kāi)源算法工具包。
一個(gè)典型的完整因果推斷流程主要由三個(gè)部分組成。

  • 第一,數(shù)據(jù)中的因果結(jié)構(gòu)應(yīng)當(dāng)首先被學(xué)習(xí)和發(fā)現(xiàn),用作這一任務(wù)的手段通常被稱為因果發(fā)現(xiàn)(causal discovery)。這些被發(fā)現(xiàn)的因果關(guān)系會(huì)被表示為因果結(jié)構(gòu)公式(structural causal models, SCM)或因果圖(一種有向無(wú)環(huán)圖,directed acyclic graphs, DAG)。

  • 第二,我們需要將我們感興趣的因果問(wèn)題中的量用因果變量(causal estimand)表示,其中一個(gè)例子是平均治療效應(yīng)(average treatment effect, ATE)。這些因果變量接下來(lái)會(huì)通過(guò)因果效應(yīng)識(shí)別轉(zhuǎn)化為統(tǒng)計(jì)變量(statistical estimand),這是因?yàn)橐蚬兞繜o(wú)法從數(shù)據(jù)中直接估計(jì),只有識(shí)別后的因果變量才可以從數(shù)據(jù)中被估計(jì)出來(lái)。

  • 最后,我們需要選擇合適的因果估計(jì)模型從數(shù)據(jù)中去學(xué)些這些被識(shí)別后的因果變量。完成這些事情之后,諸如策略估計(jì)問(wèn)題和反事實(shí)問(wèn)題等因果問(wèn)題也可以被解決了。


YLearn 因果學(xué)習(xí)開(kāi)源項(xiàng)目實(shí)現(xiàn)了最近文獻(xiàn)中多個(gè)因果推斷相關(guān)算法,并且致力于在機(jī)器學(xué)習(xí)的幫助下支持因果推斷流程中從因果發(fā)現(xiàn)到因果效應(yīng)估計(jì)等各方各面的相關(guān)內(nèi)容,尤其是當(dāng)有很多觀測(cè)得到的數(shù)據(jù)時(shí),這一目的會(huì)更有前景。
YLearn 因果學(xué)習(xí)開(kāi)源項(xiàng)目(以下簡(jiǎn)稱 YLearn),是業(yè)界首款一站式處理因果學(xué)習(xí)完整流程的開(kāi)源算法工具包,率先同時(shí)解決了因果學(xué)習(xí)中「因果發(fā)現(xiàn)、因果量識(shí)別、因果效應(yīng)估計(jì)、反事實(shí)推斷和策略學(xué)習(xí)」五大關(guān)鍵問(wèn)題,具有一站式、新而全、用途廣等特點(diǎn),將「決策者」使用門檻降到最低,助力政府和企業(yè)自動(dòng)化「決策」能力的有效提升。 

圖片


GitHub 開(kāi)源地址:https://github.com/DataCanvasIO/YLearn
YLearn 的應(yīng)用目前主要集中在兩個(gè)方向:
用于彌補(bǔ)機(jī)器學(xué)習(xí)理論上的缺陷。在機(jī)器學(xué)習(xí)模型中加入因果機(jī)制,利用因果關(guān)系的穩(wěn)定性和可解釋性,優(yōu)化模型、提升效率;
幫助實(shí)現(xiàn)用戶需求從預(yù)測(cè)到?jīng)Q策的遷移,例如使用基于因果推斷的推薦算法幫助企業(yè)進(jìn)行客戶增長(zhǎng)和智能營(yíng)銷等。
它具有一站式、新而全、用途廣等特點(diǎn):

  • 一站式:通常的因果學(xué)習(xí)流程包括從數(shù)據(jù)中發(fā)現(xiàn)因果結(jié)構(gòu),對(duì)因果結(jié)構(gòu)建立因果模型,使用因果模型進(jìn)行因果效應(yīng)識(shí)別和對(duì)從數(shù)據(jù)中對(duì)因果效應(yīng)進(jìn)行估計(jì)。YLearn 一站式地支持這些功能,使用戶以最低的學(xué)習(xí)成本使用與部署因果學(xué)習(xí)。

  • 新而全:YLearn 實(shí)現(xiàn)了多個(gè)近年來(lái)在因果學(xué)習(xí)領(lǐng)域中發(fā)展出的各類算法,例如 Meta-Learner、Double Machine Learning 等。也將一直致力于緊跟前沿進(jìn)展,保持因果識(shí)別與估計(jì)模型的先進(jìn)和全面。

  • 用途廣:YLearn 支持對(duì)估計(jì)得到的因果效應(yīng)進(jìn)行解釋、根據(jù)因果效應(yīng)在各種方案中選取收益最大的方案并可視化決策過(guò)程等功能。除此之外,YLearn 也支持將因果結(jié)構(gòu)中識(shí)別出的因果效應(yīng)的概率分布表達(dá)式以 LaTex 的形式輸出等小功能,幫助用戶將因果學(xué)習(xí)與其他方向交叉。


設(shè)計(jì)思路

圖片

YLearn 因果學(xué)習(xí)開(kāi)源項(xiàng)目組成

YLearn 有 5 個(gè)主要的因果推斷相關(guān)概念,包括:

  1. CausalDiscovery. 發(fā)現(xiàn)數(shù)據(jù)集中線性和非線性的因果關(guān)系并用因果圖表示。
  2. CausalModel. 確定感興趣的因果量之后,識(shí)別因果圖中的工具變量,操作因果圖,識(shí)別因果效應(yīng)(Causal Effect)的估計(jì)表達(dá)式,也可判斷給定集合是否可以作為后門調(diào)整集合,前門調(diào)整集合等。
  3. EstimatorModel. 給定因過(guò)量的估計(jì)表達(dá)式與訓(xùn)練數(shù)據(jù)集,從訓(xùn)練數(shù)據(jù)集中訓(xùn)練多種估計(jì)模型,使用訓(xùn)練好的估計(jì)模型在新的測(cè)試數(shù)據(jù)集上估計(jì)因果效應(yīng)。
  4. Policy. 給定感興趣的因果效應(yīng)和數(shù)據(jù)集,尋找一種最佳方案以提升因果效應(yīng),獲取理想收益。
  5. Interpreter. 解釋估計(jì)模型(EstimatorModel)所預(yù)測(cè)的因果效應(yīng),解釋策略模型(Policy)所給出的最佳方案。


這些不同的部分通過(guò)組合,可以完成一個(gè)完整的因果學(xué)習(xí)相關(guān)流程,為了方便使用,YLearn 也將它們一起封裝在 Why 這個(gè)統(tǒng)一的 API 接口中。

圖片

YLearn 中的因果推斷流程

從用戶給定的訓(xùn)練數(shù)據(jù)開(kāi)始:

  1. 使用 CausalDiscovery 去發(fā)現(xiàn)數(shù)據(jù)中的因果關(guān)系和因果結(jié)構(gòu),它們會(huì)以 CausalGraph 的形式表示和存在。
  2. 這些因果圖接下來(lái)會(huì)被輸入進(jìn) CausalModel, 在這里用戶感興趣的因果變量會(huì)通過(guò)因果效應(yīng)識(shí)別轉(zhuǎn)化為相應(yīng)的可被估計(jì)的統(tǒng)計(jì)變量(也叫識(shí)別后的因果變量)。
  3. 一個(gè)特定的 EstimatorModel 此時(shí)會(huì)在訓(xùn)練集中訓(xùn)練,得到訓(xùn)練好的估計(jì)模型,用來(lái)從數(shù)據(jù)中估計(jì)識(shí)別后的因果變量。
  4. 這個(gè)(些)訓(xùn)練好的 EstimatorModel 就可以被用來(lái)在測(cè)試數(shù)據(jù)集上估計(jì)各類不同的因果效應(yīng),同時(shí)也可以被用來(lái)作因果效應(yīng)解釋或策略方案的制定。


使用示例
1. 表示因果圖
在 YLearn 中,給定一個(gè)變量集合,與之相關(guān)的因果關(guān)系需要一個(gè) python dict 去表示變量中的因果關(guān)系,在這個(gè) dict 中,每一個(gè) key 都是它相應(yīng) value (通常是一個(gè) list)中的每一個(gè)元素的 children。我們舉一個(gè)最簡(jiǎn)單的例子,給定因果結(jié)構(gòu) X <- W -> Y ,我們首先定一個(gè)一個(gè) python dict 表示相關(guān)因果結(jié)構(gòu),這個(gè) dict 會(huì)被當(dāng)作參數(shù)傳入 CausalGraph 中:

causation = {'X': ['W'], 'W':[], 'Y':['W']}
cg = CausalGraph(causation=causation)


cg 就是我們的表示了因果關(guān)系 X <- W -> Y 的因果圖。同時(shí)需要注意的是,如果存在 不可觀測(cè)的混淆因子(unobserved confounder),那么除了前述的 dict 外,我們需要一個(gè)額外的 python list 去記錄這些不可觀測(cè)的因果結(jié)構(gòu),比如下面的因果圖存在不可觀測(cè)的混淆因子(綠色節(jié)點(diǎn)): 

圖片

它會(huì)首先被轉(zhuǎn)化為一個(gè)有潛在混淆曲線(latent confounding arcs,下圖中有兩個(gè)箭頭的黑色曲線)的因果圖:

圖片

接著為了表示這張圖,我們需要
(1) 定義一個(gè) python dict 表示圖中可觀測(cè)的部分。
(2) 定義一個(gè) list 記錄不可觀測(cè)的潛在混淆曲線,其中 list 中的每一個(gè)元素包括一條不可觀測(cè)潛在混淆曲線的兩個(gè)端點(diǎn):

from ylearn.causal_model.graph import CausalGraph
     causation_unob = {
         'X': ['Z2'],
         'Z1': ['X''Z2'],
         'Y': ['Z1''Z3'],
         'Z3': ['Z2'],
         'Z2': [], 
     }
     arcs = [('X''Z2'), ('X''Z3'), ('X''Y'), ('Z2''Y')]

     cg_unob = CausalGraph(causation=causation_unob, latent_confounding_arcs=arcs)


2. 因果效應(yīng)識(shí)別
因果效應(yīng)識(shí)別對(duì)于因果效應(yīng)(包括因果變量)估計(jì)是至關(guān)重要的,這一過(guò)程可以通過(guò) YLearn 很輕松地實(shí)現(xiàn)。例如,假設(shè)我們希望識(shí)別上面的因果圖 cg 中的因果變量 P(Y|do(X=x)),那么我們只需要定義一個(gè) CausalModel 然后調(diào)用它的 identify() 方法即可:

  cm = CausalModel(causal_graph=cg)
     cm.identify(treatment={'X'}, outcome={'Y'}, identify_method=('backdoor''simple'))


在上面的例子中我們使用了 后門調(diào)整,YLearn 也支持包括前門調(diào)整,工具變量識(shí)別,一般因果效應(yīng)識(shí)別[1](如果任意因果量可以被識(shí)別,返回識(shí)別后的結(jié)果,如果不可識(shí)別,則返回不可識(shí)別)等各類識(shí)別算法。
3. 工具變量
工具變量是一種因果推斷中很重要的手段,利用 YLearn 去尋找工具變量十分方便直接,例如,我們有如下的因果圖:

圖片

那么我們可以按使用 CausalModel 的常用步驟來(lái)識(shí)別工具變臉:(1)定義 dict 和 list 去表示因果關(guān)系;(2)定義 CausalGraph 的 instance 建立 YLearn 中的因果圖;(3)以上一步定義的 CausalGraph 作為參數(shù),定義 CausalModel 的 instance;(4)調(diào)用 CausalModel 的 get_iv() 尋找工具變量:

 causation = {
         'p': [],
         't': ['p''l'],
         'l': [],
         'g': ['t''l']
     }
     arc = [('t''g')]
     cg = CausalGraph(causation=causation, latent_confounding_arcs=arc)
     cm = CausalModel(causal_graph=cg)
     cm.get_iv('t''g')


4. 因果效應(yīng)估計(jì)
使用 YLearn 進(jìn)行因果效應(yīng)估計(jì)十分方便直接(與通常的機(jī)器學(xué)習(xí)模型使用方式十分類似,因?yàn)?YLearn 主要著眼于機(jī)器學(xué)習(xí)與因果推斷的交叉),它是一個(gè)包括 3 個(gè)步驟的流程:

  • 給定 pandas.DataFrame 形式的數(shù)據(jù),確定 treatment, outcome, adjustment, covariate 的變量名。
  • 調(diào)用 EstimatorModel 的 fit() 方法訓(xùn)練模型。
  • 調(diào)用 EstimatorModel 的 estimate() 方法得到估計(jì)好的因果效應(yīng)。


用戶可以查看文檔中的相關(guān)頁(yè)面查閱各類估計(jì)模型的細(xì)節(jié)。
5. 使用統(tǒng)一接口 API: Why
為了能以一種統(tǒng)一且方便的方式使用 YLearn,YLearn 提供了一個(gè)接口 Why,它幾乎封裝了 YLearn 中的所有內(nèi)容,包括因果效應(yīng)識(shí)別和評(píng)估訓(xùn)練得到的估計(jì)模型等。在使用 Why 的過(guò)程中,用戶可以先創(chuàng)建一個(gè) Why 的實(shí)例,然后調(diào)用 Why 的 fit() 方法訓(xùn)練這個(gè)實(shí)例,之后其他的各類方法(如 causal_effect(), score(), whatif())就可以使用了。下面的代碼是一個(gè)簡(jiǎn)單的使用樣例:

  from sklearn.datasets import fetch_california_housing

    from ylearn import Why

    housing = fetch_california_housing(as_frame=True)
    data = housing.frame
    outcome = housing.target_names[0]
    data[outcome] = housing.target

    why = Why()
    why.fit(data, outcome, treatment=['AveBedrms''AveRooms'])

    print(why.causal_effect())


應(yīng)用場(chǎng)景
從普遍意義上講,只要是需要決策支持的這類任務(wù)都可以使用 YLearn 來(lái)完成,彈性定價(jià)、客戶挽留、產(chǎn)品推薦、廣告等等,前提條件和機(jī)器學(xué)習(xí)一樣就是要準(zhǔn)備好符合要求的數(shù)據(jù)就可以。
因果學(xué)習(xí)其中有一個(gè)重要的應(yīng)用就是 Uplift 建模,直接字面理解就是提升建模,提升的是什么可以認(rèn)為提升 ROI(投入產(chǎn)出比),非常適合用在精準(zhǔn)營(yíng)銷上面。提升建模的核心是把目標(biāo)用戶分到 4 個(gè)象限里。
舉例
在向一些用戶推薦去購(gòu)買一個(gè)產(chǎn)品,比如說(shuō)一個(gè)理財(cái)或者是線上的訂閱服務(wù),那么現(xiàn)實(shí)中用戶會(huì)有 4 類:

  1. 確定會(huì)購(gòu)買的用戶,不管我是否推薦這類用戶都會(huì)購(gòu)買(鐵粉) 
  2. 不管我是否推薦他都不會(huì)購(gòu)買(黑粉),
  3. 我的推薦會(huì)提高用戶購(gòu)買轉(zhuǎn)化的,如果不推薦他不會(huì)購(gòu)買(路轉(zhuǎn)粉) 
  4. 是一些靜默用戶本來(lái)已經(jīng)訂閱了我們的服務(wù),一旦收到我們的推薦提醒反而取消了訂閱(粉轉(zhuǎn)黑)。


對(duì) 1、2 類用戶,鐵粉、黑粉我們都不需要干預(yù)他,因?yàn)檫@個(gè)投入成本的收益幾乎是 0,可以節(jié)省營(yíng)銷成本,第 4 類用戶更是堅(jiān)決不要去觸達(dá)他,避免產(chǎn)生副作用。我們重點(diǎn)需要觸達(dá)的就是第 3 類用戶,促進(jìn)購(gòu)買行為。那么機(jī)器學(xué)習(xí)模型是沒(méi)辦法完成這個(gè)任務(wù),我們需要通過(guò)因果學(xué)習(xí)里面的異質(zhì)化因果效應(yīng)評(píng)估也就是 CATE 來(lái)完成,而且還可以更進(jìn)一步,路轉(zhuǎn)粉的用戶用哪種手段收益更高,優(yōu)惠卷、打折、還是什么都不用給打個(gè)電話就可以了,這個(gè)也是可以學(xué)習(xí)出來(lái),不同的用戶可以有不同的策略,最后我們可以綜合性的提高總體投入產(chǎn)出比了。這是一個(gè)很典型的 YLearn 的應(yīng)用場(chǎng)景。

圖片


未來(lái)發(fā)展
下一步的計(jì)劃主要是對(duì) YLearn 進(jìn)行不斷迭代,從工具的成熟度、算法效率、以及最新算法的支持上不斷完善。其將在這三個(gè)方向展開(kāi):
1、Causal Machine Learning:通過(guò)因果學(xué)習(xí)的能力改善機(jī)器學(xué)習(xí),解決機(jī)器學(xué)習(xí)遇到的一些問(wèn)題,比如更高效的特征發(fā)現(xiàn)、特征工程。還有希望通過(guò)因果關(guān)系能夠提高機(jī)器學(xué)習(xí)的魯棒性、泛化能力和解釋性。
2、Automated Causal Learning:自動(dòng)化的因果學(xué)習(xí)工具包,更 high-level 的 API 接口,解決自動(dòng)化調(diào)參和優(yōu)化的問(wèn)題。讓因果學(xué)習(xí)更簡(jiǎn)單高效。
3、Decision Graph:決策圖譜,能夠把一個(gè)系統(tǒng)內(nèi)的關(guān)鍵運(yùn)營(yíng)指標(biāo)和可干預(yù)變量構(gòu)建出一個(gè)基于因果關(guān)系的圖譜,通過(guò)可視化的交互式的方式來(lái)推演各種決策動(dòng)作對(duì)運(yùn)營(yíng)指標(biāo)帶來(lái)的影響。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉