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

Середній рівень регресії зі statsmodels у Python

Maarten Van den Broeck

Content Developer at DataCamp

Надзвичайно хитромудрий парадокс!

Парадокс Сімпсона виникає, коли тренд моделі на всьому наборі даних суттєво відрізняється від трендів моделей на підмножинах набору.

trend = коефіцієнт нахилу

Середній рівень регресії зі 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...