4 пакета Python для причинно-следственного анализа данных

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


2022-08-26 22:14

Философия ИИ

Причинно-следственный анализ — это область экспериментальной статистики, направленная на установление и обоснование причинно-следственных связей. Использование статистических алгоритмов для доказательства причинно-следственных связей в наборе данных при строгом допущении называется эксплораторным причинно-следственным анализом (ЭПСА).

ЭПСА — это способ доказать причинно-следственные связи с помощью более контролируемых экспериментов, а не только на основе корреляции. Часто требуется испытать контрфактическое состояние — иное состояние при других обстоятельствах. Проблема в том, что корреляционный анализ позволяет приблизительно установить только причинно-следственные связи, но не контрфактические.

Изображение автора

Анализ причинно-следственных связей — это совершенно другая область исследований в науке о данных, поскольку он отличается от предсказаний, полученных в результате моделирования с помощью машинного обучения. Можно всегда предсказать результат МО на основе имеющихся данных, но не то, что выходит за рамки этих данных.

Чтобы узнать больше о причинно-следственном анализе, познакомимся с 4 пакетами Python, которые можно использовать для исследования данных.

1. Causalinference

Causalinference — это пакет Python, который предоставляет различные статистические методы причинно-следственного анализа. Это простой пакет, используемый для изучения основ причинно-следственного анализа. Causalinference обладает такими особенностями, как:

  • определение меры склонности к оценке и разбивке на подклассы;
  • улучшение ковариационного баланса путем тримминга;
  • оценка эффектов воздействия;
  • оценка смещения в ковариационных распределениях.

Более подробное объяснение каждого из приведенных свойств можно найти здесь.

Для испытания пакета Causalinference сначала установим его:

pip install causalinference

После завершения установки реализуем модель причинно-следственных связей для ЭПСА. Будем использовать случайные данные, полученные из пакета causalinference.

from causalinference import CausalModel
from causalinference.utils import random_data
#Y - результат, D - статус воздействия, а X - независимая переменная.
Y, D, X = random_data()
causal = CausalModel(Y, D, X)

Классификационная модель CausalModel будет анализировать данные. Однако потребуется выполнить еще несколько шагов, чтобы получить важную информацию из модели. Прежде всего получим статистическую сводку:

print(causal.summary_stats)
Изображение автора

Используя атрибут summary_stats, получим всю основную информацию о наборе данных.

Главной частью причинно-следственного анализа является получение информации об эффекте воздействия. Проще всего это сделать с помощью обычного метода наименьших квадратов.

causal.est_via_ols()
print(causal.estimates)
Изображение автора
  • ATE (Average Treatment Effect) — средний эффект воздействия.
  • ATC (Average Treatment Effect for Control) — средний эффект воздействия для контроля.
  • ATT (Average Treatment Effect for Treated) — средний эффект воздействия для объекта обработки.

Используя эту информацию, можно оценить, имеет ли воздействие эффект по сравнению с контролем.

Используя метод определения меры склонности, можно также получить информацию о вероятности воздействия в зависимости от независимых переменных.

causal.est_propensity_s()
print(causal.propensity)
Изображение автора

2. Causallib

Causallib — это пакет Python для причинно-следственного анализа, разработанный компанией IBM. Пакет предоставляет API причинно-следственного анализа, объединенный с API Scikit-Learn, что позволяет создавать сложные модели обучения с помощью метода fit-and-predict (подгонки и предсказания).

Чем особенно хорош пакет Causallib, так это количеством ноутбуков-примеров, которые можно использовать в процессе обучения.

Изображение автора

Итак, приступим к использованию пакета causallib для обучения. Сначала нужно установить его:

pip install causallib

Теперь используем образец набора данных из пакета causallib и проведем причинно-следственный анализ с помощью модели из Scikit-Learn:

from sklearn.linear_model import LogisticRegression
from causallib.estimation import IPW
from causallib.datasets import load_nhefs
data = load_nhefs()
ipw = IPW(LogisticRegression())
ipw.fit(data.X, data.a)
potential_outcomes = ipw.estimate_population_outcome(data.X, data.a, data.y)
effect = ipw.estimate_effect(potential_outcomes[1], potential_outcomes[0])

Приведенный выше код загружает данные исследования отдаленных результатов влияния курения на здоровье. Для установления и оценки причинно-следственного эффекта воспользуемся моделью логистической регрессии в качестве причинно-следственной модели.

Посмотрим на потенциальный результат и эффект воздействия.

print(potential_outcomes)
Изображение автора

Анализируя потенциальные исходы, видим, что средняя разница в весе, если бы все бросили курить (1), составляет 5,38 кг, а средняя разница в весе, если бы все курили постоянно (0), составляет 1,71 кг.

Это означает, что средняя разница в весе составляет около 3,67 кг. Таким образом, можно сделать вывод, что лечение от курения сократит увеличение веса примерно на 3,67 кг.

3. Causalimpact

Causalimpact — это пакет Python для причинно-следственного анализа, позволяющий оценить причинно-следственный эффект интервенции в отношении временных рядов. Цель анализа — определить разницу между воздействием до и после факта.

Causalimpact анализирует временной ряд ответа (например, клики, действие лекарства и т. д.) и временной ряд контроля (тот же ответ, но в более контролируемой среде) с помощью байесовской структурной модели временных рядов. Эта модель предсказывает контрфактический результат (что будет, если интервенции не случится), а затем позволяет сравнить его с фактическим результатом.

Начнем использовать пакет, предварительно его установив:

pip install causalimpact

После завершения установки пакета необходимо создать имитационные данные. Создадим набор данных со 100 наблюдениями, где эффект интервенции будет наблюдаться после временной точки 71.

import numpy as np
from statsmodels.tsa.arima_process import arma_generate_sample
from causalimpact import CausalImpact
np.random.seed(1)
x1 = arma_generate_sample(ar=[0.999], ma=[0.9], nsample=100) + 100
y = 1.2 * x1 + np.random.randn(100)
y[71:100] = y[71:100] + 10
data = pd.DataFrame(np.array([y, x1]).T, columns=["y","x1"])
pre_period = [0,69]
post_period = [71,99]
Изображение автора

Как видно выше, получены зависимая переменная (y) и независимая переменная (x1). Обычно у нас имеется более одной независимой переменной, но будем придерживаться текущих данных. Запустим анализ с этими данными, указав период до интервенции и после.

impact = CausalImpact(data, pre_period, post_period)
impact.run()
impact.plot()
Изображение автора

Приведенный выше граф представляет собой три набора информации.

  • На верхней панели отражены фактические данные и контрфактическое предсказание для периода после воздействия.
  • На средней показана разница между фактическими данными и контрфактическим прогнозом, которая представляет собой точечный причинный эффект.
  • На нижней представлена визуализация кумулятивного эффекта интервенции, где собираются точечные данные из средней панели.

Получить информацию из каждой точки данных можно так:

impact.inferences
Изображение автора

Суммарный результат (сводку) можно получить с помощью следующего кода:

impact.summary()
Изображение автора

Сводка позволяет оценить, имела ли интервенция причинно-следственный эффект. Если потребуется более подробный отчет, можно использовать следующий код:

impact.summary(output = 'report')
Изображение автора

Чтобы узнать больше о причинно-следственном анализе интервенции на основе временных рядов, ознакомьтесь с документацией Causalimpact.

4. DoWhy

DoWhy — это пакет Python, который обеспечивает современный причинно-следственный анализ. Он оснащен простым API и полной документацией.

Как следует из документации, DoWhy выполняет анализ причинно-следственных связей в 4 этапа.

  1. Моделирование задачи установления причинно-следственных связей с использованием созданных предположений.
  2. Определение выражения причинно-следственного эффекта в соответствии с предположением.
  3. Оценка этого выражения с помощью статистических методов.
  4. Проверка достоверности оценки.

Проведем анализ причинно-следственных связей с помощью пакета DoWhy. Сначала установим его, выполнив следующий код:

pip install dowhy

В качестве образца набора данных будем использовать рандомизированный набор данных из пакета DoWhy.

from dowhy import CausalModel
import dowhy.datasets
# Загрузка пробных данных 
data = dowhy.datasets.linear_dataset(
beta=10,
num_common_causes=5,
num_instruments=2,
num_samples=10000,
treatment_is_binary=True)

Теперь, с учетом графа и предположений, можно создать причинно-следственную модель.

Создание причинно-следственной модели на основе данных и заданного графа:
model = CausalModel(
data=data["df"],
treatment=data["treatment_name"],
outcome=data["outcome_name"],
graph=data["gml_graph"])model.view_model()
Изображение автора

Далее нужно определить причинно-следственный эффект с помощью следующего кода:

#Определение причинно-следственного эффекта:
estimands = model.identify_effect()
Изображение автора

Определив причинно-следственный эффект, можно оценить, насколько он статистически точен.

estimate = model.estimate_effect(identified_estimand,                              method_name="backdoor.propensity_score_matching")
Изображение автора

Оценка причинно-следственного эффекта основана на статистической оценке данных, но сама обусловленность не основана на данных. Скорее, она основана на предположениях, сделанных ранее. Необходимо проверить обоснованность предположений с помощью проверки правильности расчетов (робастности).

refute_results = model.refute_estimate(identified_estimand, estimate,                                     method_name="random_common_cause")
Изображение автора

На этом анализ причинно-следственных связей завершается и можно использовать полученную информацию для принятия решения о наличии или отсутствии причинно-следственного эффекта от воздействия.

Читайте также:

  • Как составить Data Science портфолио? Часть 4
  • Пакетная обработка 22 ГБ данных о транзакциях с помощью Pandas
  • Начало работы с Elasticsearch

Источник: Nuances of Programming


Источник: m.vk.com

Комментарии: