malyj_gorgan: (Default)
[personal profile] malyj_gorgan
Знову повернуся до причинно-наслідковості. В попередніх дописах з цим теґом я намагався охопити загальну інтуїцію на тему, а зараз вже конкретика. Це статус кво галузі, як я його розумію, хоча, звичайно, воно все не записано в книжці стандартів, еталонів і аксіом. Тим не менше, я досить-таки твердо переконаний у всьому, що виклав нижче (мінус помарки або приступи дислексії), і якщо ви хочете зі мною поговорити про прикладні причини, спочатку варто погодитися з теорією.

В дописі три секції: формальне визначення причинності, метод подвійного машинного навчання і обговорення з прикладом.

A. Визначення: що таке причинний вплив бінарної дії A на результат Y?
Часто, особливо, коли Y бінарний, може виникнути спокуса визначати причинність як (знак оклику означає заперечення, !A еквівалентно не-A) еквівалент умови "якщо A, то Y, а якщо !A, то !Y". Це буде помилкою! Так визначається не причина, а єдина, необхідна і достатня причина; а такі за межами підручників зустрінеш рідко. Якщо поміркувати над стандартним вжитком, то погодитися можна лише про таке: "ʼA є причиною Yʼ означає, що позитивною є β, міра причинного впливу A на Y", і визначається ця бета так:
(1)   β = P(Y|A) − P(Y|!A) ≡ P(Y|A=1) − P(Y|A=0)

Це визначення правильне, але неповне. Ви помітили, що тут лише дві величини, дія і наслідок? Aле в житті-то є і всякі інші події, тому формула (1) завжди несе в собі імплікацію "everything else being equal", тобто, з двох боків знаку мінус міняється лише А, а все решта залишається незмінним. На жаль, неможливо спостерегти дві події, ідентичну у всьому, крім значення A. Це фундаментальна властивість реальності, поети її формулюють як "не можна двічі увійти в ту саму ріку", а математики як "!A ∩ A = ∅". В датазнавстві такі дані називають counterfactual data, а визначення причинності пишуть не для індивідуальних подій, а для розподілів. Тобто, якщо зовнішнє середовище і передісторія нашої події описуються багатомірним вектором Х з розподілом ρ, то бету пишуть як
(2)   β = P(Y|A, X) − P(Y|!A, X),
маючи на увазі
       β = P(Y|A, ρ(X)) − P(Y|!A, ρ(X)).

Короткий ліричний відступ: я тут недавно зі знайомим зачепився язиками про причинність, і він мені написав (з використанням множинних позначень, в позначеннях теорії ймовірності переписую я) що позитивна причинність "P(Y|A) > P(Y|!A)" спростовується фактом існування таких X1X2, що "P(Y|A,X1) < "P(Y|A,X2). Це не спростування саме тому, що без додаткових уточнень, при порівнянні двох імовірностей імплікується однаковість інших умов. Це звичайно, семантика, але це і норма, з тої ж серії, коли ми по умовчанню погоджуємося з фразою "свинець важчий за залізо", не уточняючи порівняльних рамок. Кінець ліричного відступу.

Ви будете сміятися, але без додаткових умов рівняння (2) теж не зовсім правильне, вірніше, правильне лише якщо сама дія A однаково залежить від оточення і передісторії. Ну, там, як в статистичних тестах: випадкові розподіли, контрольні групи, все таке. А якщо ви не ставите чистий експеримент, а спостерігаєте за реальністю, то конфаундер (змішувальна змінна, штука, яка впливає і на причину, і на результат) за визначенням робить так, що спостережений вами розподіл іксів для ситуацій, де A сталося, буде інакшим, ніж у ситуаціях !A. Це називають упередженістю вибірки або англійським словом байас. І визначення причинності має хоч якийс смисл лише за умов, якщо в цьому визначенні ми знаємо, як ми враховуємо або ігноруємо цей байас.

B. Подвійне машинне навчання
... і ось тут вам допоможе модний метод Подвійного Машинного Навчання, або Double Machine Learning aka Double ML aka DML (ще кажуть Debiased ML, та ж абревіатура). Виводити його я вам не буду, самі знайдете, якщо захочете, розповім результати. Наперед поясню цінність методу: він важливий не тільки і не стільки тим, що дозволяє щось порахувати, а тим, що дозволяє це щось краще визначити.

Для початку, нехай у нас не бінарний ігрек, а (псевдо) неперервний, байдуже, чи на обмеженому інтервалі, чи ні. Тобто, якщо цікавим вам результат таки бінарний, то в методі Y буде імовірністю цього бінарного результату. Тоді замість імовірності в формулі (2) треба читати "математичне сподівання". Так от, нехай у вас є причинно-наслідкова модель з конфаундером:
dag1

Нехай цей конфаундер неповний, але ЯКЩО ви можете записати причинно-наслідковість як
(3а)   βA = f(X) + ε
(3б)   βY = g(X) + βA + η
для якихось функцій f і g, де ε і η позначають випадкову величину, читай, "шум". І ЯКЩО при цьому ці два шуми ортогональні одне однмоу в сенсі нейманової оргогональності (був такий поляк-статистик... якщо лінь шукати, що то таке, то повірте на слово, що воно не надто неймовірне щось, воно в житті подібне), ТО ТОДІ ось наша DML дозволить порахувати таку бету з набору спостережень (Xi,Ai, Yi). І це ваше пораховане β буде в середньому вірним для такого розподілу передісторій і середовищ, який згенерував вищезгадані трійки.

Спочатку -- як цей DML рахують:

Крок перший: розділіть ваші трійки вхідних даних на пари (Ai,Xi) і (Yi,Xi) і порахуйте дві моделі машинного навчання, F і G. Для дії A, порахуйте модель F, яка передбачає імовірність, що F(X)=P(A=1|X), а для результату Y -- стандартну регресію Y=G(X) без урахування всяких там A. Що те, що друге -- стандартні задачі supervised ML.

Крок другий: На тих самих даних, порахуйте значення дії і результату, передбачені вашими моделями. Звичайно, не буквально на тих самих даних, а через кросс-валідацію (українською -- "перехресне затверджування", мене від цього словосполучення коробить, тому вживатиму англіцизм). В асимптоті найкраще робити leaving-out-one validation, коли ви тренуєте моделі на всіх семплах, крім одного, i≠j, а потім застосовуєте модель, F або G, до цього j-го ікса. В реальності, k-fold validation для досить великого k вам вистачить. Нарешті, від спостережених значень Ai і Yi віднімаєте те, що передбачать ваші натреновані моделі F і G, застосовані до Xi); це називатиметься лишки (residuals):
(4а)   ΔAi = Ai − F(Xj),
(4b)   ΔYi = Yi − G(Xi).
Якщо ваша модель (3-ab) правдива, в цих лишках байас повинен бути повністю усуненим, і дельта ігрек повинне бути пропорційна дельті А з тим самим коефіцієнтом бета, який вам потрібен. (Ще раз, я вам лише кажу результати, виводиться воно, наприклад, тут.)

Крок третій: На парах (Ai,Yi) будуєте звичайнісіньку лінійну регресію Yi = α + βAi. При цьому, якщо ви правильно відкалібрували регресії F і G, то ваша α повинна дорівнювати нулю, тобто, кінцева модель буде
(5)   ΔY = β ΔA.

Все, ви порахували причинний вплив Y від А. Якщо β в регресії (5) у вас позитивна, то ви можете переконано стверджувати, що в реальності, яка відображається вашим тренувальним набором даних, А є причиною Y.

Що це ми тільки що зробили? Ми усунули байас, тобто, відділили прямий причинний вплив від того, що йшов від конфаундерів. Памʼятаєте "correlation is not causality"? Воно стало мантрою саме тому, що потрібно розділити ті ситуації, в яких не A спричинила Y, а обидві величини визначалися якимось зовнішнім фактором. Простий приклад: візьміть найефективніші ліки від ішемічної хвороби серця. Примітивний аналіз каже нам, що ці ліки підвищують імовірність інфаркту, бо у тих, хто ці ліки вживає, частіше стається інфаркт, ніж у тих, хто не вживає. Щоби не робити таких дурних висновків, треба якось забрати зі спостережень байас, який виник тому, що ліки приймають лише люди, у яких уже є проблеми з серцем. Метод DML, правильно застосований, дозволяє з постфактумних спостережень порахувати саме causality, ізолювавши її від непотрібних correlations. Якщо вашому серцю близька Байесова статистика, то DML -- це спосіб нормалізувати умовні імовірності до цих сами умов, заодно порахувавши розподіл умов.

C. Приклад
Уявіть собі, що у вас є набір даних з дванадцяти точок (якщо вам мало, пропорційно додайте), при цьому, дані можна так посортувати на чотири групи по три, що A в цих трійках буде, відповідно (0, 1, 0, 1), Y буде (10, 20, 30, 0), а буде ще конфаундер X, категорійна змінна, який в наших трійках дорівнюватиме (ʼX1ʼ, ʼX1ʼ, 'X2', 'X3'). Ваша задача -- порахувати причинний вплив A на Y. Давайте, виключно, для кращої візуалізації, ми додамо до цих змінних легкий маленький шум, воно нічого не міняє, лише що точки на графіку не зливаються.

Отже, примітивний підхід. Ігноруємо ікси і дивимося на Y(A) і на різницю середнього Y для A і !A:
simpleDML_1
Виглядає, що різниця між середніми негативна, дорівнює мінус десять, з чого ми робимо висновок: "дія A понижує результат Y на десять одиниць!". Бздура, звичайно, але ви собі не уявляєте, як часто ми всі робимо таку помилку, бо вчасно не подумали.

Щоби побачити, чому воно все не так просто, достатньо намалювати той самий графік, без середніх, зате позначити групи з різним значенням ікса різними кольорами:
simpleDML_2
Одразу видно, що є якісь групи, де всі значення A виглядають, наче вони зумовлені належністю до групи. Відношення дії-наслідку в таких групах, якщо дивитися на всю популяцію -- це якраз і є та кореляція, яку від причинності слід відділяти. В найпростішому випадку, як оце тут, звичайно, все видно неозброєним оком, достатньо лише викинути групи 'X2' і 'X3', розглядати лише 'X1', і тим самим неозброєним оком побачити, що причинний вплив буде плюс десять! Але, оскільки ми вивчили про подвійне машинне навчання, пропоную застосувати його. Я чесно дванадцять разів порахував регресор для A(Х) і класифікатор для Y(Х), підставив значення відповідних іксів, порахував різницю, і ось так виглядає вам розподіл лишків з формули (4), де, виключно для освітніх цілей, я зберіг те ж саме кодування кольорами різних значень ікса:
simpleDML_3
Лінійна регресія дає коефіцієнт β=10, вуаля.

Нагадую, що це був простий приклад: як воно стається, коли все очевидно. В реалі ж ніколи не виходить поділити ваші семпли на гарно розмежовані групи, неозброєне око або не бачить нічого, або бачить дуже мало. Зате подвійне машинне навчання (не лише, простіші методи теж працюють, просто не так чітко) робить все те ж саме: відділяє кореляцію від каузації і каже вам значення, найближче до правдивого причинного впливу, наскільки воно проявилося в реалі.

На самий кінець додам, що все вищесказане було для бінарних A лише тому, що так простіше і чіткіше все пояснювати. Точно так само працює модель і DML для скалярного A, хоч дискретного, хоч неперервного, хоч обмеженого, хоч ні. Більше того, так само все працює і для багатомірних A, але тоді розмивається концепція існування причинни взагалі, а залишається лише розрахунок багатомірного вектора бета.

Date: 2024-06-24 09:38 am (UTC)
From: [personal profile] sassa_nf
> P(Y|A, ρ(X))

А як цю нотацію розуміти?

Скажімо, P(Y|A) - ймовірність події Y за умови, що відбулось A. Тоді P(Y|A, X) - ймовірність події Y за умови A, та одночасно X (вектор має якесь конкретне значення). А якщо ρ(X) - ...тут я буксую. Бо у мене ρ(X) - це функція; і як тоді ймовірність того, що ....функція?

Date: 2024-06-25 05:14 am (UTC)
From: [personal profile] sassa_nf
Мда... дійсно, плутанина виникає саме через те, що запис ніби натякає конкретні значення Х, а насправді мається на увазі розподіл.

Date: 2024-06-25 07:32 am (UTC)
From: [personal profile] sassa_nf
Егеж

> спростовується фактом існування таких X1≠X2, що "P(Y|A,X1) < "P(Y|A,X2). Це не спростування саме тому...

А можна тут сказати, що не спростовується тому, що β - це не фіксоване значення, а змінна із деяким розподілом? І що ми тут обчислюємо її expectation, а не весь розподіл?
Edited Date: 2024-06-25 07:33 am (UTC)

Profile

malyj_gorgan: (Default)
malyj_gorgan

June 2025

S M T W T F S
12 345 67
89 1011 121314
151617181920 21
22232425262728
2930     

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 24th, 2025 01:01 pm
Powered by Dreamwidth Studios