Свертывание категориальных функциональных уровней в выходных данных Python StatsModels - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь создать модель множественной линейной регрессии, чтобы предсказать рейтинг, который гость дает отелю (Reviewer_Score) в Python, используя statsmodels.

Review_Total_Negative_Word_Counts как долго их отрицательные комментариио гостинице:

Total_Number_of_Reviews это сколько отзывов у отеля

Отзыв_Total_Positive_Word_Counts как долго их положительные отзывы об отеле

Total_Number_of_Reviews_Revewier_Has_Given это количество отзывов, которые гость дал на сайте

Отношение является категориальной переменной: ХОРОШО или ПЛОХО

Причина - причина посещения (Отдых или Бизнес)

Континент - континент, с которого прибыл гость (несколько уровней)

Соло означает, является ли путешественник индивидуальным («Да» или «Нет»)

Сезон - это период, в течение которого гость останавливался в отеле ('Fall ',' Winter ',' Summer ',' Spring ')

Как видите, у меня есть некоторые числовые и категориальные особенности.

Пока мой код:

import statsmodels.formula.api as smf

lm = smf.ols(formula = 'Reviewer_Score ~ Review_Total_Negative_Word_Counts + Total_Number_of_Reviews + Review_Total_Positive_Word_Counts + Total_Number_of_Reviews_Reviewer_Has_Given + Attitude + Reason + Continent + Solo + Season', data = Hotel).fit()

lm.params

lm.summary()

Моя проблема в том, что когда я смотрю на параметры (уклоны и оценки перехвата), такжеЗначения P выглядят следующим образом:

enter image description here

enter image description here

Уровни каждого изКатегориальные функции включены, и я просто хочу иметь вывод, который показывает нам наклоны и значения p для числовых и категориальных функций (НЕ наклоны и значения p для каждого уровня в категориальных функциях!)

По существуЯ хочу, чтобы выходные данные наклона выглядели так:

Перехват

Total_Number_of_Reviews

Review_Total_Positive_Word_Counts

Total_Number_of_Reviews_Revewier_Has_Given

1078 *1078* 1075 ** Причина

Континент

Соло

Сезон

Как бы я поступилчто-то вроде этого, чтобы свернуть уровни и просто показать значение и значение наклона для каждой из переменных?

1 Ответ

0 голосов
/ 11 декабря 2018

Прямо сейчас, каждый из ваших исходных входов в вашу модель преобразуется в фиктивные переменные. *

Причина, по которой я сталкиваюсь с вашими ожиданиями, я подозреваю, состоит в том, что у вас есть три типа переменных, которые вы называете категориальнымив вашей модели:

  1. Временные ("Сезон")
  2. Двоичные ("Отношение", "Разум", "Соло")
  3. Категориальные ("Континент"))

Только Continent является действительно недвоичной категоричной категорией, поскольку невозможно упорядочить континенты в иерархии без какой-либо дополнительной информации.Для "Season" модель / программа не имеет указаний на то, что существует только четыре сезона или что они происходят во временном порядке.С бинарными переменными он также не знает, что есть только два возможных значения.

Я рекомендую преобразовать двоичные переменные в 1, 0 или Nan (сначала можно использовать лямбда-функцию, а затем pd.fillna () ).

В частности, для «Сезона» звучит, что вы хотите что-то более похожее на «время года, обозначенное сезоном / кварталом».Я бы сопоставил времена года с 1,2,3 или 4.

Для «Континента» вы могли бы ранжировать континенты по количеству отзывов на каждом из них и конвертировать каждый континент в соответствующий ранг.... но вы бы регрессировали на что-то более похожее на смесь "континент" + "население с происхождения континента".(Это, конечно, может быть полезно сделать в любом случае).Или вы можете оставить кодировку фиктивной переменной, которая уже использовалась.

В качестве альтернативы, вы можете придумать случайное отображение для континента, но дополнительно включить некоторый показатель относительной численности населения каждого континента.

* Чтобы сделать это явным, вы можете использовать pd.get_dummmies ()

...