Как подогнать статистическую модель к одной переменной с горячим кодированием

#python #pandas #one-hot-encoding

#python #pandas #one-hot-encoding

Вопрос:

У меня есть мой фрейм данных, который изначально выглядел так:

  item_id              title     user_id   gender   .....
0        1   Toy Story (1995)   308        M
1        4  Get Shorty (1995)   308        M
2        5     Copycat (1995)   308        M
  

Затем я запустил регрессию со смешанными эффектами, которая работала нормально:

 import statsmodels.api as sm
import statsmodels.formula.api as smf

md = smf.mixedlm("rating ~ C(gender)   C(genre)   C(gender)*C(genre)", data, groups=data["user_id"])
mdf=md.fit()
print(mdf.summary())
  

Однако впоследствии я выполнил одно горячее кодирование для переменной gender, и фрейм данных стал таким:

  item_id              title     user_id   gender_M     gender_F   .....
0        1   Toy Story (1995)   308        1              0
1        4  Get Shorty (1995)   308        1              0
2        5     Copycat (1995)   308        1              0
  

Было бы правильно запустить модель таким образом (изменение пола с помощью gender_M и gender_F)? Это то же самое? Или есть лучший способ?

 md = smf.mixedlm("rating ~ gender_M   gender_F   C(genre)   C(gender)*C(genre)", data, groups=data["user_id"])
mdf=md.fit()
print(mdf.summary())
  

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

1. Для обычных наименьших квадратов ( smf.ols ) категориальные функции заменяются фиктивными переменными. Итак, я бы сказал, что за кулисами mixedlm делает то же самое. Самостоятельное создание фиктивных переменных может быть полезно с такими модулями, как sklearn которые сами этого не сделают, но для statsmodels этого не требуется.

2. То, что вы сделали во втором, будет не совсем правильным. C() создает полную базу макетов с одной исключенной группой . Если вы включите все макеты, то этот набор функций будет идеально совпадать с константой. Итак, во второй регрессии вы должны опустить gender_F , и вы должны получить тот же результат.

3. Т. е. в вашей второй регрессии вы должны увидеть некоторое предупреждение внизу сводки модели, в строках «Наименьшее собственное значение равно 3,18 e-30. Это может указывать на наличие сильных проблем с мультиколлинеарностью или на то, что матрица проектирования является сингулярной »