Парадокс Симпсона

Промежуточная регрессия со statsmodels в Python

Maarten Van den Broeck

Content Developer at DataCamp

Самый хитроумный парадокс!

Парадокс Симпсона возникает, когда тренд модели на всём наборе данных существенно отличается от трендов моделей на подмножествах этого набора.

тренд = коэффициент наклона

Промежуточная регрессия со statsmodels в Python

Синтетические данные Симпсона

x y group
62.24344 70.60840 D
52.33499 14.70577 B
56.36795 46.39554 C
66.80395 66.17487 D
66.53605 89.24658 E
62.38129 91.45260 E
  • 5 групп данных, обозначенных от «A» до «E»
1 https://www.rdocumentation.org/packages/datasauRus/topics/simpsons_paradox
Промежуточная регрессия со statsmodels в Python

Линейные регрессии

Весь набор данных

mdl_whole = ols("y ~ x", 
                 data=simpsons_paradox).fit()

print(mdl_whole.params)
Intercept           -38.554  
x                     1.751  

По группам

mdl_by_group = ols("y ~ group + group:x + 0",
                   data = simpsons_paradox).fit()

print(mdl_by_group.params)
  groupA    groupB    groupC    groupD    groupE  
 32.5051   67.3886   99.6333  132.3932  123.8242  
groupA:x  groupB:x  groupC:x  groupD:x  groupE:x  
 -0.6266   -1.0105   -0.9940   -0.9908   -0.5364
Промежуточная регрессия со statsmodels в Python

График всего набора данных

sns.regplot(x="x",
            y="y",
            data=simpsons_paradox,
            ci=None)

Диаграмма рассеяния набора данных парадокса Симпсона, все группы объединены. Тренд положительный.png

Промежуточная регрессия со statsmodels в Python

График по группам

sns.lmplot(x="x",
           y="y",
           data=simpsons_paradox,
           hue="group",
           ci=None)

Диаграмма рассеяния набора данных парадокса Симпсона, окрашенная по группам. Тренд для каждой группы отрицательный.png

Промежуточная регрессия со statsmodels в Python

Как примирить противоречие

Полезный совет

По возможности стройте график набора данных.

Общий совет

Выбрать наилучшую модель в общем случае невозможно — всё зависит от набора данных и поставленного вопроса.

Ещё один полезный совет

Сформулируйте вопрос до начала моделирования.

Промежуточная регрессия со statsmodels в Python

Пример с тестовыми баллами

scatter-video-games-whole.png

scatter-video-games-by-group.png

Промежуточная регрессия со statsmodels в Python

Пример с инфекционными заболеваниями

scatter-cities-whole.png

scatter-cities-by-group.png

Промежуточная регрессия со statsmodels в Python

Как примирить противоречие

  • Как правило (но не всегда), сгруппированная модель даёт больше информации.
  • Возможно, вы упустили объясняющие переменные?
  • Контекст имеет значение.
Промежуточная регрессия со statsmodels в Python

Парадокс Симпсона в реальных данных

  • Парадокс обычно проявляется менее очевидно.
  • Вместо полного изменения направления вы можете увидеть нулевой наклон.
  • Он может проявляться не в каждой группе.
Промежуточная регрессия со statsmodels в Python

Давайте потренируемся!

Промежуточная регрессия со statsmodels в Python

Preparing Video For Download...