博客專欄

EEPW首頁 > 博客 > 九章云極DataCanvas YLearn因果學習開源項目:從預測到?jīng)Q策

九章云極DataCanvas YLearn因果學習開源項目:從預測到?jīng)Q策

發(fā)布人:機器之心 時間:2022-07-21 來源:工程師 發(fā)布文章

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


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

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

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

  • 第二,我們需要將我們感興趣的因果問題中的量用因果變量(causal estimand)表示,其中一個例子是平均治療效應(average treatment effect, ATE)。這些因果變量接下來會通過因果效應識別轉(zhuǎn)化為統(tǒng)計變量(statistical estimand),這是因為因果變量無法從數(shù)據(jù)中直接估計,只有識別后的因果變量才可以從數(shù)據(jù)中被估計出來。

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


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

圖片


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

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

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

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


設(shè)計思路

圖片

YLearn 因果學習開源項目組成

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

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


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

圖片

YLearn 中的因果推斷流程

從用戶給定的訓練數(shù)據(jù)開始:

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


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

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


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

圖片

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

圖片

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

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

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


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

圖片

那么我們可以按使用 CausalModel 的常用步驟來識別工具變臉:(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. 因果效應估計
使用 YLearn 進行因果效應估計十分方便直接(與通常的機器學習模型使用方式十分類似,因為 YLearn 主要著眼于機器學習與因果推斷的交叉),它是一個包括 3 個步驟的流程:

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


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

  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())


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

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


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

圖片


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


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



關(guān)鍵詞: AI

相關(guān)推薦

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

關(guān)閉