博客專欄

        EEPW首頁 > 博客 > 九章云極DataCanvas YLearn因果學習開源項目:從預測到決策

        九章云極DataCanvas YLearn因果學習開源項目:從預測到決策

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

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


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

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

        • 第一,數據中的因果結構應當首先被學習和發現,用作這一任務的手段通常被稱為因果發現(causal discovery)。這些被發現的因果關系會被表示為因果結構公式(structural causal models, SCM)或因果圖(一種有向無環圖,directed acyclic graphs, DAG)。

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

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


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

        圖片


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

        • 一站式:通常的因果學習流程包括從數據中發現因果結構,對因果結構建立因果模型,使用因果模型進行因果效應識別和對從數據中對因果效應進行估計。YLearn 一站式地支持這些功能,使用戶以最低的學習成本使用與部署因果學習。

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

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


        設計思路

        圖片

        YLearn 因果學習開源項目組成

        YLearn 有 5 個主要的因果推斷相關概念,包括:

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


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

        圖片

        YLearn 中的因果推斷流程

        從用戶給定的訓練數據開始:

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


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

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


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

        圖片

        它會首先被轉化為一個有潛在混淆曲線(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. 因果效應識別
        因果效應識別對于因果效應(包括因果變量)估計是至關重要的,這一過程可以通過 YLearn 很輕松地實現。例如,假設我們希望識別上面的因果圖 cg 中的因果變量 P(Y|do(X=x)),那么我們只需要定義一個 CausalModel 然后調用它的 identify() 方法即可:

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


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

        圖片

        那么我們可以按使用 CausalModel 的常用步驟來識別工具變臉:(1)定義 dict 和 list 去表示因果關系;(2)定義 CausalGraph 的 instance 建立 YLearn 中的因果圖;(3)以上一步定義的 CausalGraph 作為參數,定義 CausalModel 的 instance;(4)調用 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 形式的數據,確定 treatment, outcome, adjustment, covariate 的變量名。
        • 調用 EstimatorModel 的 fit() 方法訓練模型。
        • 調用 EstimatorModel 的 estimate() 方法得到估計好的因果效應。


        用戶可以查看文檔中的相關頁面查閱各類估計模型的細節。
        5. 使用統一接口 API: Why
        為了能以一種統一且方便的方式使用 YLearn,YLearn 提供了一個接口 Why,它幾乎封裝了 YLearn 中的所有內容,包括因果效應識別和評估訓練得到的估計模型等。在使用 Why 的過程中,用戶可以先創建一個 Why 的實例,然后調用 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())


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

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


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

        圖片


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


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 深水埗区| 雅安市| 乐昌市| 大兴区| 民乐县| 西畴县| 漳浦县| 汉阴县| 抚松县| 贡觉县| 东乡| 米林县| 台南县| 东丰县| 合肥市| 安远县| 镇江市| 嘉义市| 澜沧| 泾阳县| 神农架林区| 库尔勒市| 白沙| 新乡市| 清徐县| 扎囊县| 建阳市| 朔州市| 津市市| 永春县| 搜索| 晋江市| 屯门区| 沁源县| 明光市| 阳西县| 太仆寺旗| 沂源县| 桓台县| 宁海县| 安达市|