CausalML 基于機器學習算法的因果推理方法

CausalML 是一個 Python 包,它使用基于最新研究的機器學習算法提供一套提升建模和因果推理方法。它提供了一個標準界面,允許用戶從實驗或觀察數據中估計條件平均處理效應 (CATE),也稱為個體治療效應 (ITE)。從本質上講,它估計了干預 W 對具有觀察到特征 X 的用戶的結果 Y 的因果影響,而無需對模型形式進行強有力的假設。

在本節中,我們將更深入地探究CausalML中所實現的算法。
我們采用內曼 - 魯賓潛在結果框架,并假定Y代表結果,W代表處理分配, X i X_i Xi? 代表觀測到的協變量。

支持的算法

CausalML目前支持以下方法:

  • 基于樹的算法
    • 基于KL散度、歐幾里得距離和卡方的提升隨機森林
    • 基于上下文處理選擇的提升隨機森林
    • 基于delta-delta-p(ΔΔP)準則的提升隨機森林(僅適用于二叉樹和二分類問題)
    • 基于IDDP的提升隨機森林(僅適用于二叉樹和二分類問題)
    • 交互樹(僅適用于二叉樹和二分類問題)
    • 因果推斷樹(僅適用于二叉樹和二分類問題)
  • 元學習器算法
    • S - 學習器
    • T - 學習器
    • X - 學習器
    • R - 學習器
    • 雙穩健(DR)學習器
  • 工具變量算法
    • 兩階段最小二乘法(2SLS)
    • 雙穩健工具變量(DRIV)學習器
  • 基于神經網絡的算法
    • CEVAE
    • DragonNet
  • 處理優化算法
    • 反事實單元選擇
    • 反事實價值估計器

元學習器算法

元算法(或元學習器)是一種框架,它利用任意機器學習估計器(稱為基學習器)來估計條件平均處理效應(CATE)。

元算法要么使用單個基學習器,并將處理指示變量作為一個特征(例如S - 學習器),要么為處理組和對照組分別使用多個基學習器(例如T - 學習器、X - 學習器和R - 學習器)。

S - 學習器

S - 學習器使用單個機器學習模型按如下方式估計處理效應:

  • 階段1:使用機器學習模型,借助協變量X和處理指示變量W來估計平均結果 μ ( x ) \mu(x) μ(x)
    μ ( x , w ) = E [ Y ∣ X = x , W = w ] \mu(x, w)=E[Y|X = x, W = w] μ(x,w)=E[YX=x,W=w]
  • 階段2:將CATE估計定義為:
    τ ^ ( x ) = μ ^ ( x , W = 1 ) ? μ ^ ( x , W = 0 ) \hat{\tau}(x)=\hat{\mu}(x, W = 1)-\hat{\mu}(x, W = 0) τ^(x)=μ^?(x,W=1)?μ^?(x,W=0)

在模型中納入傾向得分可減少由正則化引發的混雜偏差。

當對照組和處理組在協變量方面差異很大時,單個線性模型不足以對對照組和處理組特征的不同相關維度及平滑度進行編碼。

T - 學習器

T - 學習器由以下兩個階段組成:

  • 階段1:使用機器學習模型估計平均結果 μ 0 ( x ) \mu_0(x) μ0?(x) μ 1 ( x ) \mu_1(x) μ1?(x)
    μ 0 ( x ) = E [ Y ( 0 ) ∣ X = x ] \mu_0(x)=E[Y(0)|X = x] μ0?(x)=E[Y(0)X=x]
    μ 1 ( x ) = E [ Y ( 1 ) ∣ X = x ] \mu_1(x)=E[Y(1)|X = x] μ1?(x)=E[Y(1)X=x]
  • 階段2:將CATE估計定義為:
    τ ^ ( x ) = μ ^ 1 ( x ) ? μ ^ 0 ( x ) \hat{\tau}(x)=\hat{\mu}_1(x)-\hat{\mu}_0(x) τ^(x)=μ^?1?(x)?μ^?0?(x)

X - 學習器

X - 學習器是T - 學習器的擴展,由以下三個階段組成:

  • 階段1:使用機器學習模型估計平均結果 μ 0 ( x ) \mu_0(x) μ0?(x) μ 1 ( x ) \mu_1(x) μ1?(x)
    μ 0 ( x ) = E [ Y ( 0 ) ∣ X = x ] \mu_0(x)=E[Y(0)|X = x] μ0?(x)=E[Y(0)X=x]
    μ 1 ( x ) = E [ Y ( 1 ) ∣ X = x ] \mu_1(x)=E[Y(1)|X = x] μ1?(x)=E[Y(1)X=x]
  • 階段2:基于 μ 0 ( x ) \mu_0(x) μ0?(x)為處理組中的用戶i估算用戶級處理效應 D i 1 D_{i1} Di1?,基于 μ 1 ( x ) \mu_1(x) μ1?(x)為對照組中的用戶j估算用戶級處理效應 D j 0 D_{j0} Dj0?
    D i 1 = Y i 1 ? μ ^ 0 ( X i 1 ) D_{i1}=Y_{i1}-\hat{\mu}_0(X_{i1}) Di1?=Yi1??μ^?0?(Xi1?)
    D i 0 = μ ^ 1 ( X i 0 ) ? Y i 0 D_{i0}=\hat{\mu}_1(X_{i0})-Y_{i0} Di0?=μ^?1?(Xi0?)?Yi0?

然后使用機器學習模型估計 τ 1 ( x ) = E [ D 1 ∣ X = x ] \tau_1(x)=E[D_1|X = x] τ1?(x)=E[D1?X=x] τ 0 ( x ) = E [ D 0 ∣ X = x ] \tau_0(x)=E[D_0|X = x] τ0?(x)=E[D0?X=x]

  • 階段3:通過 τ 1 ( x ) \tau_1(x) τ1?(x) τ 0 ( x ) \tau_0(x) τ0?(x)的加權平均來定義CATE估計:
    τ ( x ) = g ( x ) τ 0 ( x ) + ( 1 ? g ( x ) ) τ 1 ( x ) \tau(x)=g(x)\tau_0(x)+(1 - g(x))\tau_1(x) τ(x)=g(x)τ0?(x)+(1?g(x))τ1?(x)

其中 g ∈ [ 0 , 1 ] g\in[0, 1] g[0,1]。我們可以將傾向得分用于 g ( x ) g(x) g(x)

R - 學習器

R - 學習器使用結果的交叉驗證折外估計 m ^ ( ? i ) ( x i ) \hat{m}^{(-i)}(x_i) m^(?i)(xi?)和傾向得分 e ^ ( ? i ) ( x i ) \hat{e}^{(-i)}(x_i) e^(?i)(xi?)。它由以下兩個階段組成:

  • 階段1:使用交叉驗證通過機器學習模型擬合 m ^ ( x ) \hat{m}(x) m^(x) e ^ ( x ) \hat{e}(x) e^(x)
  • 階段2:通過最小化R - 損失 L ^ n ( τ ( x ) ) \hat{L}^n(\tau(x)) L^n(τ(x))來估計處理效應:
    L ^ n ( τ ( x ) ) = 1 n ∑ i = 1 n ( ( Y i ? m ^ ( ? i ) ( X i ) ) ? ( W i ? e ^ ( ? i ) ( X i ) ) τ ( X i ) ) 2 \hat{L}^n(\tau(x))=\frac{1}{n}\sum_{i = 1}^{n}((Y_i-\hat{m}^{(-i)}(X_i))-(W_i-\hat{e}^{(-i)}(X_i))\tau(X_i))^2 L^n(τ(x))=n1?i=1n?((Yi??m^(?i)(Xi?))?(Wi??e^(?i)(Xi?))τ(Xi?))2

其中 e ^ ( ? i ) ( X i ) \hat{e}^{(-i)}(X_i) e^(?i)(Xi?)等表示未使用第i個訓練樣本做出的折外留出預測。

雙穩健(DR)學習器

DR - 學習器通過在兩個階段交叉擬合雙穩健得分函數來估計CATE,步驟如下。我們首先將數據 { Y , X , W } \{Y, X, W\} {Y,X,W}隨機劃分為3個分區 { Y i , X i , W i } \{Y_i, X_i, W_i\} {Yi?,Xi?,Wi?} i = { 1 , 2 , 3 } i = \{1, 2, 3\} i={1,2,3}

  • 階段1:使用 { X 1 , W 1 } \{X_1, W_1\} {X1?,W1?}通過機器學習擬合傾向得分模型 e ^ ( x ) \hat{e}(x) e^(x),并使用 { Y 2 , X 2 , W 2 } \{Y_2, X_2, W_2\} {Y2?,X2?,W2?}通過機器學習為已處理和未處理用戶擬合結果回歸模型 m ^ 0 ( x ) \hat{m}_0(x) m^0?(x) m ^ 1 ( x ) \hat{m}_1(x) m^1?(x)
  • 階段2:使用 { Y 3 , X 3 , W 3 } \{Y_3, X_3, W_3\} {Y3?,X3?,W3?}通過機器學習從以下偽結果擬合CATE模型 τ ^ ( X ) \hat{\tau}(X) τ^(X)
    ? = W ? e ^ ( X ) e ^ ( X ) ( 1 ? e ^ ( X ) ) ( Y ? m ^ W ( X ) ) + m ^ 1 ( X ) ? m ^ 0 ( X ) \phi=\frac{W-\hat{e}(X)}{\hat{e}(X)(1 - \hat{e}(X))}(Y-\hat{m}_W(X))+\hat{m}_1(X)-\hat{m}_0(X) ?=e^(X)(1?e^(X))W?e^(X)?(Y?m^W?(X))+m^1?(X)?m^0?(X)
  • 階段3:再次重復階段1和階段2兩次。首先使用 { Y 2 , X 2 , W 2 } \{Y_2, X_2, W_2\} {Y2?,X2?,W2?} { Y 3 , X 3 , W 3 } \{Y_3, X_3, W_3\} {Y3?,X3?,W3?} { Y 1 , X 1 , W 1 } \{Y_1, X_1, W_1\} {Y1?,X1?,W1?}分別用于傾向得分模型、結果模型和CATE模型。然后使用 { Y 3 , X 3 , W 3 } \{Y_3, X_3, W_3\} {Y3?,X3?,W3?} { Y 2 , X 2 , W 2 } \{Y_2, X_2, W_2\} {Y2?,X2?,W2?} { Y 1 , X 1 , W 1 } \{Y_1, X_1, W_1\} {Y1?,X1?,W1?}分別用于傾向得分模型、結果模型和CATE模型。最終的CATE模型是這3個CATE模型的平均值。

雙穩健工具變量(DRIV)學習器

我們將DR - 學習器的思路與局部平均處理效應(LATE)的雙穩健得分函數相結合,以估計條件LATE。為此,我們首先將數據 { Y , X , W , Z } \{Y, X, W, Z\} {Y,X,W,Z}隨機劃分為3個分區 { Y i , X i , W i , Z i } \{Y_i, X_i, W_i, Z_i\} {Yi?,Xi?,Wi?,Zi?} i = { 1 , 2 , 3 } i = \{1, 2, 3\} i={1,2,3}

  • 階段1:使用 { X 1 , W 1 , Z 1 } \{X_1, W_1, Z_1\} {X1?,W1?,Z1?}為已分配和未分配用戶擬合傾向得分模型 e ^ 0 ( x ) \hat{e}_0(x) e^0?(x) e ^ 1 ( x ) \hat{e}_1(x) e^1?(x),并使用 { Y 2 , X 2 , Z 2 } \{Y_2, X_2, Z_2\} {Y2?,X2?,Z2?}通過機器學習為已分配和未分配用戶擬合結果回歸模型 m ^ 0 ( x ) \hat{m}_0(x) m^0?(x) m ^ 1 ( x ) \hat{m}_1(x) m^1?(x)。分配概率 p Z p_Z pZ?既可以由用戶提供,也可以來自一個簡單模型,因為在大多數用例中,分配從設計上就是隨機的。
  • 階段2:使用 { Y 3 , X 3 , W 3 } \{Y_3, X_3, W_3\} {Y3?,X3?,W3?}通過最小化以下損失函數,通過機器學習擬合條件LATE模型 τ ^ ( X ) \hat{\tau}(X) τ^(X)
    L ( τ ^ ( X ) ) = E ^ [ ( m ^ 1 ( X ) ? m ^ 0 ( X ) + Z ( Y ? m ^ 1 ( X ) ) p Z ? ( 1 ? Z ) ( Y ? m ^ 0 ( X ) ) 1 ? p Z ? ( e ^ 1 ( X ) ? e ^ 0 ( X ) + Z ( W ? e ^ 1 ( X ) ) p Z ? ( 1 ? Z ) ( W ? e ^ 0 ( X ) ) 1 ? p Z ) τ ^ ( X ) ) 2 ] L(\hat{\tau}(X))=\hat{E}[(\hat{m}_1(X)-\hat{m}_0(X)+\frac{Z(Y-\hat{m}_1(X))}{p_Z}-\frac{(1 - Z)(Y-\hat{m}_0(X))}{1 - p_Z}-(\hat{e}_1(X)-\hat{e}_0(X)+\frac{Z(W-\hat{e}_1(X))}{p_Z}-\frac{(1 - Z)(W-\hat{e}_0(X))}{1 - p_Z})\hat{\tau}(X))^2] L(τ^(X))=E^[(m^1?(X)?m^0?(X)+pZ?Z(Y?m^1?(X))??1?pZ?(1?Z)(Y?m^0?(X))??(e^1?(X)?e^0?(X)+pZ?Z(W?e^1?(X))??1?pZ?(1?Z)(W?e^0?(X))?)τ^(X))2]
  • 階段3:與DR - 學習器類似,使用不同的分區排列再次重復階段1和階段2兩次進行估計。最終的條件LATE模型是這3個條件LATE模型的平均值。

基于樹的算法

提升樹

提升樹方法由一組使用基于樹的算法的方法構成,其分裂準則基于提升差異。提出了三種不同方式來量化分裂導致的散度增益:
D g a i n = D a f t e r s p l i t ( P T , P C ) ? D b e f o r e s p l i t ( P T , P C ) D_{gain}=D_{aftersplit}(P_T, P_C)-D_{beforesplit}(P_T, P_C) Dgain?=Daftersplit?(PT?,PC?)?Dbeforesplit?(PT?,PC?)

其中 D D D衡量散度, P T P_T PT? P C P_C PC?分別指處理組和對照組中感興趣結果的概率分布。該軟件包中實現了三種量化散度的不同方式:KL散度、歐幾里得距離和卡方。

KL散度

Kullback - Leibler(KL)散度由下式給出:
K L ( P : Q ) = ∑ k = l e f t , r i g h t p k log ? p k q k KL(P:Q)=\sum_{k = left, right}p_k\log\frac{p_k}{q_k} KL(P:Q)=k=left,right?pk?logqk?pk??

其中 p p p是處理組中的樣本均值, q q q是對照組中的樣本均值, k k k表示計算 p p p q q q所在的葉子節點。

歐幾里得距離

歐幾里得距離由下式給出:
E D ( P : Q ) = ∑ k = l e f t , r i g h t ( p k ? q k ) 2 ED(P:Q)=\sum_{k = left, right}(p_k - q_k)^2 ED(P:Q)=k=left,right?(pk??qk?)2

其中符號與上述相同。

卡方

最后, χ 2 \chi^2 χ2散度由下式給出:
χ 2 ( P : Q ) = ∑ k = l e f t , r i g h t ( p k ? q k ) 2 q k \chi^2(P:Q)=\sum_{k = left, right}\frac{(p_k - q_k)^2}{q_k} χ2(P:Q)=k=left,right?qk?(pk??qk?)2?

其中符號與上述相同。

DDP

delta-delta-p(ΔΔP)方法,其樣本分裂準則定義如下:
Δ Δ P = ∣ ( P T ( y ∣ a 0 ) ? P C ( y ∣ a 0 ) ? ( P T ( y ∣ a 1 ) ? P C ( y ∣ a 1 ) ) ) ∣ \Delta\Delta P = |(P_T(y|a_0)-P_C(y|a_0)-(P_T(y|a_1)-P_C(y|a_1)))| ΔΔP=(PT?(ya0?)?PC?(ya0?)?(PT?(ya1?)?PC?(ya1?)))

其中 a 0 a_0 a0? a 1 a_1 a1?是分裂A的結果, y y y是選定的類別, P T P_T PT? P C P_C PC?分別是處理組和對照組的響應率。換句話說,我們首先計算每個分支中的響應率差異( Δ P l e f t \Delta P_{left} ΔPleft? Δ P r i g h t \Delta P_{right} ΔPright?),隨后計算它們之間的差異( Δ Δ P = ∣ Δ P l e f t ? Δ P r i g h t ∣ \Delta\Delta P = |\Delta P_{left}-\Delta P_{right}| ΔΔP=∣ΔPleft??ΔPright?)。

IDDP

基于ΔΔP方法,實現了IDDP方法,其樣本分裂準則定義如下:

I D D P = Δ Δ P × I ( ? , ? l , ? r ) IDDP = \Delta\Delta P \times I(\phi, \phi_l, \phi_r) IDDP=ΔΔP×I(?,?l?,?r?)

其中, Δ Δ P ? \Delta\Delta P^* ΔΔP?定義為 Δ Δ P ? ∣ E [ Y ( 1 ) ? Y ( 0 ) ] ∣ X ∈ ? ∣ \Delta\Delta P - |E[Y(1) - Y(0)]|_{X \in \phi}| ΔΔP?E[Y(1)?Y(0)]X?? I ( ? , ? l , ? r ) I(\phi, \phi_l, \phi_r) I(?,?l?,?r?)定義為:

I ( ? , ? l , ? r ) = H ( n t ( ? ) n ( ? ) , n c ( ? ) n ( ? ) ) × 2 1 + Δ Δ P ? × 3 + n t ( ? ) n ( ? ) H ( n t ( ? l ) n ( ? ) , n t ( ? r ) n ( ? ) ) + n c ( ? ) n ( ? ) × H ( n c ( ? l ) n ( ? ) , n c ( ? r ) n ( ? ) ) + 1 2 I(\phi, \phi_l, \phi_r) = H(\frac{n_t(\phi)}{n(\phi)}, \frac{n_c(\phi)}{n(\phi)}) \times \frac{2}{1 + \Delta\Delta P^*} \times \frac{3 + \frac{n_t(\phi)}{n(\phi)}H(\frac{n_t(\phi_l)}{n(\phi)}, \frac{n_t(\phi_r)}{n(\phi)}) + \frac{n_c(\phi)}{n(\phi)} \times H(\frac{n_c(\phi_l)}{n(\phi)}, \frac{n_c(\phi_r)}{n(\phi)}) + 1}{2} I(?,?l?,?r?)=H(n(?)nt?(?)?,n(?)nc?(?)?)×1+ΔΔP?2?×23+n(?)nt?(?)?H(n(?)nt?(?l?)?,n(?)nt?(?r?)?)+n(?)nc?(?)?×H(n(?)nc?(?l?)?,n(?)nc?(?r?)?)+1?

其中,熵 H H H定義為 H ( p , q ) = ( ? p × log ? 2 ( p ) ) + ( ? q × log ? 2 ( q ) ) H(p, q) = (-p \times \log_2(p)) + (-q \times \log_2(q)) H(p,q)=(?p×log2?(p))+(?q×log2?(q)) ? \phi ?是與當前決策節點相關聯的特征空間的一個子集, ? l \phi_l ?l? ? r \phi_r ?r?分別是左子節點和右子節點。 n t ( ? ) n_t(\phi) nt?(?)是處理樣本的數量, n c ( ? ) n_c(\phi) nc?(?)是對照樣本的數量, n ( ? ) n(\phi) n(?)是當前(父)節點中所有樣本的數量。

IT(Interaction Tree)

交互樹(IT),其樣本分裂準則是在所有可行的分裂中最大化 G G G統計量:
G ( s ? ) = max ? G ( s ) G(s^*) = \max G(s) G(s?)=maxG(s)

其中 G ( s ) = t 2 ( s ) G(s) = t^2(s) G(s)=t2(s) t ( s ) t(s) t(s)定義為:

t ( s ) = ( y 1 L ? y 0 L ) ? ( y 1 R ? y 0 R ) σ × 1 n 1 + 1 n 2 + 1 n 3 + 1 n 4 t(s) = \frac{(y_{1L} - y_{0L}) - (y_{1R} - y_{0R})}{\sigma \times \sqrt{\frac{1}{n_1} + \frac{1}{n_2} + \frac{1}{n_3} + \frac{1}{n_4}}} t(s)=σ×n1?1?+n2?1?+n3?1?+n4?1? ?(y1L??y0L?)?(y1R??y0R?)?

其中 σ = ∑ i = 1 4 w i s i 2 \sigma = \sum_{i = 1}^{4} w_i s_i^2 σ=i=14?wi?si2?是常數方差的合并估計量, w i = ( n i ? 1 ) / ∑ j = 1 4 ( n j ? 1 ) w_i = (n_i - 1) / \sum_{j = 1}^{4}(n_j - 1) wi?=(ni??1)/j=14?(nj??1)。此外, y 1 L y_{1L} y1L? s 1 2 s_{1}^{2} s12? n 1 n_1 n1?分別是左子節點中處理組的樣本均值、樣本方差和樣本大小。其他量也采用類似的表示方法。

請注意,此實現與原始實現的不同之處在于:(1) 剪枝技術;(2) 確定最佳樹大小的驗證方法。

CIT(Causal Inference Tree)

因果推斷樹(CIT),其樣本分裂準則計算似然比檢驗統計量:

L R T ( s ) = ? n τ L 2 × ln ? ( n τ L S S E τ L ) ? n τ R 2 × ln ? ( n τ R S S E τ R ) + n τ L 1 ln ? n τ L 1 + n τ L 0 ln ? n τ L 0 + n τ R 1 ln ? n τ R 1 + n τ R 0 ln ? n τ R 0 LRT(s) = -\frac{n_{\tau L}}{2} \times \ln(\frac{n_{\tau L}}{SSE_{\tau L}}) - \frac{n_{\tau R}}{2} \times \ln(\frac{n_{\tau R}}{SSE_{\tau R}}) + n_{\tau L1} \ln n_{\tau L1} + n_{\tau L0} \ln n_{\tau L0} + n_{\tau R1} \ln n_{\tau R1} + n_{\tau R0} \ln n_{\tau R0} LRT(s)=?2nτL??×ln(SSEτL?nτL??)?2nτR??×ln(SSEτR?nτR??)+nτL1?lnnτL1?+nτL0?lnnτL0?+nτR1?lnnτR1?+nτR0?lnnτR0?

其中 n τ n_{\tau} nτ? n τ 0 n_{\tau 0} nτ0? n τ 1 n_{\tau 1} nτ1?分別是節點 τ \tau τ中的觀測總數、分配到對照組的觀測數以及分配到處理組的觀測數。 S S E τ SSE_{\tau} SSEτ?定義為:

S S E τ = ∑ i ∈ τ : t i = 1 ( y i ? y ^ t 1 ) 2 + ∑ i ∈ τ : t i = 0 ( y i ? y ^ t 0 ) 2 SSE_{\tau} = \sum_{i \in \tau : t_i = 1}(y_i - \hat{y}_{t1})^2 + \sum_{i \in \tau : t_i = 0}(y_i - \hat{y}_{t0})^2 SSEτ?=iτ:ti?=1?(yi??y^?t1?)2+iτ:ti?=0?(yi??y^?t0?)2

y ^ t 0 \hat{y}_{t0} y^?t0? y ^ t 1 \hat{y}_{t1} y^?t1?分別是節點 τ \tau τ中對照組和處理組的樣本平均響應。

請注意,此實現與原始實現的不同之處在于:(1) 剪枝技術;(2) 確定最佳樹大小的驗證方法。

CTS(Contextual Treatment Selection)

上下文處理選擇(CTS)方法,其樣本分裂準則定義如下:

Δ ^ μ ( s ) = p ^ ( ? l ∣ ? ) × max ? t = 0 , … , K y ^ t ( ? l ) + p ^ ( ? r ∣ ? ) × max ? t = 0 , … , K y ^ t ( ? r ) ? max ? t = 0 , … , K y ^ t ( ? ) \hat{\Delta}\mu(s) = \hat{p}(\phi_l | \phi) \times \max_{t = 0, \ldots, K} \hat{y}^t(\phi_l) + \hat{p}(\phi_r | \phi) \times \max_{t = 0, \ldots, K} \hat{y}^t(\phi_r) - \max_{t = 0, \ldots, K} \hat{y}^t(\phi) Δ^μ(s)=p^?(?l??)×t=0,,Kmax?y^?t(?l?)+p^?(?r??)×t=0,,Kmax?y^?t(?r?)?t=0,,Kmax?y^?t(?)

其中 ? l \phi_l ?l? ? r \phi_r ?r?分別指左葉和右葉中的特征子空間, p ^ ( ? j ∣ ? ) \hat{p}(\phi_j | \phi) p^?(?j??)表示在給定 ? \phi ?的情況下,主體處于 ? j \phi_j ?j?的估計條件概率, y ^ t ( ? j ) \hat{y}^t(\phi_j) y^?t(?j?)是在處理 t t t下的條件期望響應。

價值優化方法

當處理成本較高時,該軟件包支持用于分配處理組的方法。為了理解這個問題,將總體分為以下四類會有所幫助:

  • 依從者:這類人只有在接受處理時才會有有利的結果。
  • 總是接受者:這類人無論是否接受處理都會有有利的結果。
  • 從不接受者:這類人無論是否接受處理都不會有有利的結果。
  • 違抗者:這類人只有在不接受處理時才會有有利的結果。

反事實單元選擇

提出了一種使用反事實邏輯選擇處理單元的方法。假設選擇上述不同類別單元有以下收益:

  • 依從者: β \beta β
  • 總是接受者: γ \gamma γ
  • 從不接受者: θ \theta θ
  • 違抗者: δ \delta δ

如果 X X X表示個體的特征集,單元選擇問題可以表述如下:

argmax X β P ( complier ∣ X ) + γ P ( always?-?taker ∣ X ) + θ P ( never?-?taker ∣ X ) + δ P ( defier ∣ X ) \underset{X}{\text{argmax}} \beta P(\text{complier} | X) + \gamma P(\text{always - taker} | X) + \theta P(\text{never - taker} | X) + \delta P(\text{defier} | X) Xargmax?βP(complierX)+γP(always?-?takerX)+θP(never?-?takerX)+δP(defierX)

這個問題可以用反事實邏輯重新表述。假設 W = w W = w W=w表示個體接受處理, W = w ′ W = w' W=w表示個體未接受處理。類似地,令 F = f F = f F=f表示個體有有利結果, F = f ′ F = f' F=f表示個體有不利結果。那么優化問題變為:

argmax X β P ( f w , f w ′ ′ ∣ X ) + γ P ( f w , f w ′ ∣ X ) + θ P ( f w ′ , f w ′ ′ ∣ X ) + δ P ( f w ′ , f w ′ ∣ X ) \underset{X}{\text{argmax}} \beta P(f_w, f_{w'}' | X) + \gamma P(f_w, f_{w'} | X) + \theta P(f_{w'}, f_{w'}' | X) + \delta P(f_{w'}, f_{w'} | X) Xargmax?βP(fw?,fw?X)+γP(fw?,fw?X)+θP(fw?,fw?X)+δP(fw?,fw?X)

請注意,上述內容僅僅是根據相關用戶細分的定義得出的。隨后使用反事實邏輯在某些條件下解決上述優化問題。

注意:該軟件包中當前的實現具有很強的實驗性。

反事實價值估計器

該軟件包中實現的反事實價值估計方法使用標準機器學習模型預測一個單元在不同處理條件下的結果。將一個單元分配到特定處理的預期值由下式給出:

E [ ( v ? c c w ) Y w ? i c w ] E[(v - cc_w)Y_w - ic_w] E[(v?ccw?)Yw??icw?]

其中 Y w Y_w Yw?是在給定處理 w w w下有利事件(如轉化)發生的概率, v v v是有利事件的價值, c c w cc_w ccw?是有利事件發生時觸發的處理成本, i c w ic_w icw?是無論結果是否有利與處理相關的成本。

因果概率

如果一個結果在沒有某個原因的情況下不會發生,那么這個原因對于該結果來說被稱為是“必要的”。如果一個結果在有某個原因的情況下會發生,那么這個原因對于該結果來說被稱為是“充分的”。如果上述兩個條件都成立,那么這個原因對于該結果來說被稱為是“必要且充分的”。Jin Tian and Judea Pearl表明,我們可以計算出一個原因屬于上述三種類型中每一種的概率界限。

為了理解如何計算因果概率的界限,我們需要特殊的符號來表示反事實量。令 y t y_t yt?表示命題“如果處理組設置為‘處理’, y y y會發生”, y c ′ y_{c}' yc?表示命題“如果處理組設置為‘對照’, y y y不會發生”,對于(假設為)二元結果和處理變量的其余兩種組合也類似表示。

那么,處理對于 y y y的發生是“充分的”概率可以定義為:

P S = P ( y t ∣ c , y ′ ) P_S = P(y_t | c, y') PS?=P(yt?c,y)

這是指在實際上處理設置為對照且結果未發生的情況下,如果處理設置為 t t t y y y會發生的概率。

處理對于 y y y的發生是“必要的”概率可以定義為:

P N = P ( y c ′ ∣ t , y ) P_N = P(y_{c}' | t, y) PN?=P(yc?t,y)

這是指在實際上 y y y發生且處理發生的情況下,如果處理設置為對照, y y y不會發生的概率。

最后,處理既是必要又是充分的概率定義為:

P N S = P ( y t , y c ′ ) P_{NS} = P(y_t, y_{c}') PNS?=P(yt?,yc?)

它表示如果處理發生, y y y會發生;如果處理不發生, y y y不會發生。 P N S P_{NS} PNS? P N P_N PN? P S P_S PS?的關系如下:

P N S = P ( t , y ) P N + P ( c , y ′ ) P S P_{NS} = P(t, y)P_N + P(c, y')P_S PNS?=P(t,y)PN?+P(c,y)PS?

在界定上述三個量時,除了實驗數據,我們還利用觀測數據。觀測數據通過聯合概率來表征:

P T Y = P ( t , y ) , P ( c , y ) , P ( t , y ′ ) , P ( c , y ′ ) P_{TY} = P(t, y), P(c, y), P(t, y'), P(c, y') PTY?=P(t,y),P(c,y),P(t,y),P(c,y)

這個程序的主要思想是將界定任務轉化為一個線性規劃問題(關于他們方法的現代實現

使用線性規劃方法,并結合某些約束條件和觀測數據,Jin Tian and Judea Pearl發現 P N S P_{NS} PNS?的精確下限為:

max ? { 0 , P ( y t ) ? P ( y c ) , P ( y ) ? P ( y c ) , P ( y t ) ? P ( y ) } \max\{0, P(y_t) - P(y_c), P(y) - P(y_c), P(y_t) - P(y)\} max{0,P(yt?)?P(yc?),P(y)?P(yc?),P(yt?)?P(y)}

精確上限為:

min ? { P ( y t ) , P ( y c ′ ) , P ( t , y ) + P ( c , y ′ ) , P ( y t ) ? P ( y c ) + P ( t , y ′ ) + P ( c , y ) } \min\{P(y_t), P(y_{c}'), P(t, y) + P(c, y'), P(y_t) - P(y_c) + P(t, y') + P(c, y)\} min{P(yt?),P(yc?),P(t,y)+P(c,y),P(yt?)?P(yc?)+P(t,y)+P(c,y)}

他們使用類似的程序來找到 P S P_S PS? P N P_N PN?的界限。get_pns_bounds()函數使用Jin Tian and Judea Pearl中的結果計算這三個因果概率中每一個的界限。

選定的傳統方法

該軟件包支持選定的傳統因果推斷方法。這些方法通常用于使用觀測(非實驗)數據進行因果推斷。在這類研究中,處理組和對照組之間觀察到的差異通常不等于“潛在結果” E [ Y ( 1 ) ? Y ( 0 ) ] E[Y(1) - Y(0)] E[Y(1)?Y(0)]之間的差異。因此,以下方法試圖以不同方式處理這個問題。

匹配法

匹配法的總體思路是找到在相關特征方面盡可能相似的處理單元和未處理單元。因此,匹配方法可以被視為試圖模仿隨機對照試驗的因果推斷方法家族的一部分。

雖然有許多不同的方法來匹配處理單元和未處理單元,但最常見的方法是使用傾向得分:

e i ( X i ) = P ( W i = 1 ∣ X i ) e_i(X_i) = P(W_i = 1 | X_i) ei?(Xi?)=P(Wi?=1∣Xi?)

然后根據 e ( X ) e(X) e(X)使用某種距離準則(如 k : 1 k:1 k:1最近鄰)來匹配處理單元和未處理單元。由于匹配通常在處理群體和對照群體之間進行,這種方法估計處理組的平均處理效應(ATT):

E [ Y ( 1 ) ∣ W = 1 ] ? E [ Y ( 0 ) ∣ W = 1 ] E[Y(1) | W = 1] - E[Y(0) | W = 1] E[Y(1)W=1]?E[Y(0)W=1]

處理逆概率加權法

處理逆概率加權(IPTW)方法使用傾向得分 e e e,通過實際處理 W W W的概率的倒數來對處理群體和未處理群體進行加權。對于二元處理 W ∈ { 1 , 0 } W \in \{1, 0\} W{1,0}

W e + 1 ? W 1 ? e \frac{W}{e} + \frac{1 - W}{1 - e} eW?+1?e1?W?

通過這種方式,IPTW方法可以被視為創建了一個人工總體,其中處理單元和未處理單元在其觀測特征 X X X方面是相似的。

與匹配法相比,IPTW的一個可能優點是,由于處理單元和未處理單元之間缺乏重疊而丟棄的數據可能更少。該方法的一個已知問題是,極端的傾向得分可能會產生高度可變的估計量。已經提出了不同的方法來修剪和標準化IP權重。

兩階段最小二乘法(2SLS)

識別 W W W Y Y Y的處理效應的基本要求之一是,在給定協變量 X X X的條件下, W W W Y Y Y的潛在結果正交。如果 W W W Y Y Y都受到一個未觀測到的變量(從 Y Y Y中去除 W W W的真實效應后的誤差項)的影響,而這個變量不在 X X X中,那么這個條件可能會被違反。在這種情況下,工具變量方法試圖借助與 W W W相關但與誤差項不相關的第三個變量 Z Z Z來估計 W W W Y Y Y的效應。換句話說,工具變量 Z Z Z僅通過經過 W W W的有向路徑與 Y Y Y相關。如果這些條件得到滿足,在沒有協變量的情況下, W W W Y Y Y的效應可以使用以下樣本類似公式進行估計:

C o v ( Y i , Z i ) C o v ( W i , Z i ) \frac{Cov(Y_i, Z_i)}{Cov(W_i, Z_i)} Cov(Wi?,Zi?)Cov(Yi?,Zi?)?

工具變量估計最常用的方法是兩階段最小二乘法(2SLS)。在這種方法中,原因變量 W W W首先對工具變量 Z Z Z進行回歸。然后,在第二階段,將感興趣的結果 Y Y Y對第一階段模型的預測值進行回歸。直觀地說,通過僅使用由 Z Z Z的變化引起的 W W W的變化比例來估計 W W W Y Y Y的效應。具體來說,假設我們有線性模型:

Y = W α + X β + u = Ξ γ + u Y = W\alpha + X\beta + u = \Xi\gamma + u Y=Wα++u=Ξγ+u

為方便起見,這里我們令 Ξ = [ W , X ] \Xi = [W, X] Ξ=[W,X] γ = [ α ′ , β ′ ] ′ \gamma = [\alpha', \beta']' γ=[α,β],假設我們有工具變量 Z Z Z,其列數至少與 W W W 的列數相同,令 Ω = [ Z , X ] \Omega = [Z, X] Ω=[Z,X],2SLS 估計量如下:

γ ^ 2 S L S = [ Ξ ′ Ω ( Ω ′ Ω ) ? 1 Ω ′ Ξ ] ? 1 [ Ξ ′ Ω ′ ( Ω ′ Ω ) ? 1 Ω ′ Y ] \hat{\gamma}_{2SLS} = [\Xi'\Omega(\Omega'\Omega)^{-1}\Omega'\Xi]^{-1}[\Xi'\Omega'(\Omega'\Omega)^{-1}\Omega'Y] γ^?2SLS?=[ΞΩ(ΩΩ)?1ΩΞ]?1[ΞΩ(ΩΩ)?1ΩY]

局部平均處理效應(LATE)

在許多情況下,處理措施 W W W 可能取決于受試者自己的選擇,并且無法在實驗環境中直接實施。然而,可以將用戶隨機分配到處理組/對照組,以便促使處理組中的用戶接受處理。這就是不依從的情況,即用戶可能不遵守他們被分配的狀態 Z Z Z,決定是否接受處理。與價值優化方法部分類似,通常在這種情況下有 3 種類型的用戶:

  • 依從者:這些人只有在被分配到處理組時才會接受處理。
  • 總是接受者:這些人無論被分配到哪個組都會接受處理。
  • 從不接受者:這些人無論被分配到哪個組都不會接受處理。

然而,為了便于識別,我們假設不存在違抗者,即那些只有在被分配到對照組時才會接受處理的人。

在這種情況下,可以測量依從者的處理效應:

τ ^ C o m p l i e r = E [ Y ∣ Z = 1 ] ? E [ Y ∣ Z = 0 ] E [ W ∣ Z = 1 ] ? E [ W ∣ Z = 0 ] \hat{\tau}_{Complier} = \frac{E[Y|Z = 1] - E[Y|Z = 0]}{E[W|Z = 1] - E[W|Z = 0]} τ^Complier?=E[WZ=1]?E[WZ=0]E[YZ=1]?E[YZ=0]?

這就是局部平均處理效應(LATE)。如果我們將分配狀態 Z Z Z 作為工具變量,該估計量也等同于 2SLS。

針對平均處理效應(ATE)的靶向最大似然估計(TMLE)

靶向最大似然估計(TMLE)提供了一種雙穩健半參數方法,借助機器學習算法直接“針對”平均處理效應。與其他方法(包括結果回歸和處理逆概率加權)相比,TMLE 通常表現更好,特別是在處理有偏處理和異常值時。

給定二元處理 W W W、協變量 X X X 和結果 Y Y Y,針對 ATE 的 TMLE 按以下步驟進行:

  • 步驟 1
    使用交叉擬合通過機器學習估計傾向得分 e ^ ( x ) \hat{e}(x) e^(x)、處理組的預測結果 m ^ 1 ( x ) \hat{m}_1(x) m^1?(x) 以及對照組的預測結果 m ^ 0 ( x ) \hat{m}_0(x) m^0?(x)

  • 步驟 2
    Y Y Y 縮放為 Y ~ = Y ? min ? Y max ? Y ? min ? Y \widetilde{Y} = \frac{Y - \min Y}{\max Y - \min Y} Y =maxY?minYY?minY?,使得 Y ~ ∈ [ 0 , 1 ] \widetilde{Y} \in [0, 1] Y [0,1]。使用相同的縮放函數將 m ^ i ( x ) \hat{m}_i(x) m^i?(x) 轉換為 m ~ i ( x ) \widetilde{m}_i(x) m i?(x) i = 0 , 1 i = 0, 1 i=0,1。裁剪縮放后的函數,使其值保持在單位區間內。

  • 步驟 3
    Q = log ? ( m ~ W ( X ) 1 ? m ~ W ( X ) ) Q = \log(\frac{\widetilde{m}_W(X)}{1 - \widetilde{m}_W(X)}) Q=log(1?m W?(X)m W?(X)?)。最大化以下偽對數似然函數:

max ? h 0 , h 1 ? 1 N ∑ i [ Y ~ i log ? ( 1 + exp ? ( ? Q i ? h 0 ( 1 ? W ) 1 ? e ^ ( X i ) ? h 1 W e ^ ( X i ) ) ) + ( 1 ? Y ~ i ) log ? ( 1 + exp ? ( Q i + h 0 ( 1 ? W ) 1 ? e ^ ( X i ) + h 1 W e ^ ( X i ) ) ) ] \max_{h_0, h_1} -\frac{1}{N} \sum_{i} [\widetilde{Y}_i \log(1 + \exp(-Q_i - \frac{h_0(1 - W)}{1 - \hat{e}(X_i)} - \frac{h_1W}{\hat{e}(X_i)})) + (1 - \widetilde{Y}_i) \log(1 + \exp(Q_i + \frac{h_0(1 - W)}{1 - \hat{e}(X_i)} + \frac{h_1W}{\hat{e}(X_i)}))] h0?,h1?max??N1?i?[Y i?log(1+exp(?Qi??1?e^(Xi?)h0?(1?W)??e^(Xi?)h1?W?))+(1?Y i?)log(1+exp(Qi?+1?e^(Xi?)h0?(1?W)?+e^(Xi?)h1?W?))]

  • 步驟 4
    令:

Q ~ 0 = 1 1 + exp ? ( ? Q ? h 0 1 ? e ^ ( X ) ) \widetilde{Q}_0 = \frac{1}{1 + \exp(-Q - \frac{h_0}{1 - \hat{e}(X)})} Q ?0?=1+exp(?Q?1?e^(X)h0??)1?
Q ~ 1 = 1 1 + exp ? ( ? Q ? h 1 e ^ ( X ) ) \widetilde{Q}_1 = \frac{1}{1 + \exp(-Q - \frac{h_1}{\hat{e}(X)})} Q ?1?=1+exp(?Q?e^(X)h1??)1?

Q ~ 1 \widetilde{Q}_1 Q ?1? Q ~ 0 \widetilde{Q}_0 Q ?0? 的差異重新縮放回原始范圍后,取樣本平均值作為 ATE 的估計值。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77271.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解鎖深度學習激活函數

在深度學習的廣袤天地里,激活函數宛如隱匿于神經網絡架構中的神奇密碼,掌控著模型學習與表達的關鍵力量。今天,就讓我們一同深入探究這些激活函數的奇妙世界,揭開它們神秘的面紗。 一、激活函數為何不可或缺? 想象一…

從零到有的游戲開發(visual studio 2022 + easyx.h)

引言 本文章適用于C語言初學者掌握基本的游戲開發, 我將用詳細的步驟引領大家如何開發屬于自己的游戲。 作者溫馨提示:不要認為開發游戲很難,一些基本的游戲邏輯其實很簡單, 關于游戲的開發環境也不用擔心,我會詳細…

大數據專業學習路線

大數據專業學習路線 目錄 基礎知識核心技術進階技能實戰項目職業發展學習資源學習計劃常見問題 1. 基礎知識 1.1 編程語言 Python:大數據分析的基礎語言 基礎語法和數據類型函數和模塊面向對象編程文件操作和異常處理常用庫:NumPy, Pandas, Matplot…

flink部署使用(flink-connector-jdbc)連接達夢數據庫并寫入讀取數據

flink介紹 1)Apache Flink 是一個框架和分布式處理引擎,用于對無界和有界數據流進行有狀態計算。Flink 被設計在所有常見的集群環境中運行,以內存執行速度和任意規模來執行計算。 2)在實時計算或離線任務中,往往需要…

用swift playground寫個ios應用和大模型或者網站交互

import SwiftUIstruct ContentView: View {State private var textFieldText: String ""State private var outputText: String "輸出將會顯示在這里"private let tip:String "消息已發送,請等待"State private var history:[Stri…

springboot+vue2集成JWT token實現權限驗證

前端項目搭建參考: Vue項目的搭建和啟動_vue項目啟動 csdn-CSDN博客 Vue ElementUI 登錄頁面_vue用戶登錄頁面-CSDN博客 跨域問題前端解決-CSDN博客 實現思路: 1. 實現的目的:為了保護網站安全信息,使用jwt進行權限驗證&#xf…

Cursor編程-從入門到精通__0409

早期的Github Copilot 最近更新了,支持Agent編程,字節跳動Trae使用(免費),但成熟程度不如Cursor,Cursor前50次免費 Copilot VS Cursor*** 1,Cursor VSCode 二次開發,IDE級別 2&…

MyBatis 詳解及代碼示例

MyBatis 是一個 半自動 ORM 框架,主要用于 Java 與數據庫之間的持久化操作,它本質是對 JDBC 的封裝 全名:MyBatis(前身 iBATIS)核心作用:自動將 SQL 執行結果映射為 Java 對象;也可以將 Java 對…

1.6-抓包技術(Burp Suite\Yakit抓包\Web、APP、小程序)

1.6-抓包技術(Burp Suite\Yakit抓包\Web、APP、小程序) 如果要使用抓包軟件,基本上第一步都是要安裝證書的。原因如下: 客戶端(瀏覽器或應用)會檢測到證書不受信任,并彈出 證書錯誤&#xff0…

Java 大視界 -- 基于 Java 的大數據隱私保護在金融客戶信息管理中的實踐與挑戰(178)

💖親愛的朋友們,熱烈歡迎來到 青云交的博客!能與諸位在此相逢,我倍感榮幸。在這飛速更迭的時代,我們都渴望一方心靈凈土,而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識,也…

第十屆 藍橋杯 嵌入式 省賽

一、分析 這屆的真題,有點像第七屆的液位檢測。 這屆的題目開始,貌似比賽描述的功能,邏輯上變得更好梳理了。一開始就把大致的功能給你說明一遍,不像之前都是一塊一塊的說明。 1. 基本功能 1)測量競賽板上電位器 R…

實現usb的MTP功能

前言:最終結果根據用戶自主選擇可實現host和device功能的切換。 效果展示: 當插入usb時設備會彈窗 當用戶選擇設備模式時pc端就會出現mtp設備盤符 實現mtp設備 ubuntu架構根文件系統通過uMTP-Responder實現usb的MTP功能 添加服務 /home/flynn/firfly_rootfs/lib/system…

React-05React中props屬性(傳遞數據),propTypes校驗,類式與函數式組件props的使用

1.類式組件props基本數據讀取與解構運算符傳遞 <script type"text/babel">// 創建組件class PersonalInfo extends React.Component {render() {// 讀取props屬性 并讀取值console.log(props,this.props);return(<ul><li>姓名&#xff1a;{this.p…

PCI認證 密鑰注入 ECC算法工具 NID_secp521r1 國密算法 openssl 全套證書生成,從證書提取公私鑰數組 x,y等

步驟 1.全套證書已經生成。OK 2.找國芯要ECC加密解密簽名驗簽代碼。給的邏輯說明沒有示例代碼很難的上。 3.集成到工具 與SP聯調。 1.用openssl全套證書生成及驗證 注意&#xff1a;這里CA 簽發 KLD 證書用的是SHA256。因為芯片只支持SHA256算法,不支持SHA512。改成統一。…

藍橋杯每日刷題c++

目錄 P9240 [藍橋杯 2023 省 B] 冶煉金屬 - 洛谷 (luogu.com.cn) P8748 [藍橋杯 2021 省 B] 時間顯示 - 洛谷 (luogu.com.cn) P10900 [藍橋杯 2024 省 C] 數字詩意 - 洛谷 (luogu.com.cn) P10424 [藍橋杯 2024 省 B] 好數 - 洛谷 (luogu.com.cn) P8754 [藍橋杯 2021 省 AB2…

oracle 數據庫字段類型為NUMBER(5,2)時,并且數據庫值為0.1,為什么Java執行SQL查出來時為“.1“?

在 Oracle 數據庫中&#xff0c;當字段類型為 NUMBER(5,2) 且存儲的值為 0.1 時&#xff0c;Java 程序查詢結果可能顯示為 ".1"&#xff08;省略前導零&#xff09;&#xff0c;這是由 Oracle JDBC 驅動默認的數字格式化行為 導致的。以下是原因分析和解決方案&#…

3月AI論文精選十篇

1. Feature-Level Insights into Artificial Text Detection with Sparse Autoencoders[1] 核心貢獻&#xff1a;通過稀疏自編碼器揭示AI生成文本的檢測特征&#xff0c;提出基于特征分布的鑒別方法。研究發現&#xff0c;AI文本在稀疏編碼空間中呈現獨特的"高頻低幅"…

STM32在裸機(無RTOS)環境下,需要手動實現隊列機制來替代FreeRTOS的CAN發送接收函數

xQueueSendToBackFromISR(ecuCanRxQueue, hcan->pRxMsg, &xHigherPriorityTaskWoken)&#xff0c;xQueueReceive(mscCanRxQueue,&mscRxMsg,0)和xQueueSendToBack(mscCanTxQueue, &TxMessageTemp, 0 )這3個函數&#xff0c;在裸機下實現&#xff1a; 在裸機&…

使用PX4,gazebo,mavros為旋翼添加下視的相機(仿真采集openrealm數據集-第一步)

目錄 一.方法一&#xff08;沒成功&#xff09; 1.運行PX4 2.運行mavros通訊 3.啟動仿真世界和無人機 &#xff08;1&#xff09;單獨測試相機 &#xff08;2&#xff09;make px4_sitl gazebo啟動四旋翼iris無人機 二.方法二&#xff08;成功&#xff09; 1.通過 rosl…

7、nRF52xx藍牙學習(nrf_gpiote.c庫函數學習)

續前一篇文章。 3、nrfx_gpiote_in_event_enable void nrfx_gpiote_in_event_enable(nrfx_gpiote_pin_t pin, bool int_enable) {NRFX_ASSERT(nrf_gpio_pin_present_check(pin));NRFX_ASSERT(pin_in_use_by_gpiote(pin));if (pin_in_use_by_port(pin)){nrf_gpiote_polarity_t…