Есть ли способ сгруппировать уровни по номинальному признаку по медиане ответа? - PullRequest
0 голосов
/ 22 февраля 2020

** Описание проблемы: **

В Цена дома Kaggle набор данных, я пытаюсь использовать NeighborHood в качестве номинальной функции (возможно, но пока предполагается, что она номинальная). Ниже представлены результаты 25 levels:

array(['CollgCr', 'Veenker', 'Crawfor', 'NoRidge', 'Mitchel', 'Somerst', 'NWAmes', 'OldTown', 'BrkSide', 'Sawyer', 'NridgHt', 'NAmes', 'SawyerW', 'IDOTRR', 'MeadowV', 'Edwards', 'Timber', 'Gilbert', 'StoneBr', 'ClearCr', 'NPkVill', 'Blmngtn', 'BrDale', 'SWISU', 'Blueste'], dtype=object)

sb.violinplot(x=houseData['Neighborhood'], y=response). Чтобы уменьшить уровни, скажем ниже 10, я пытаюсь сгруппировать уровни на основе медианы распределения каждого уровня. Например, распределения NridgHt и NoRidge a, видимые в violinplot, почти одинаковы. Мне кажется, что они не должны быть двух разных уровней, а объединены в один уровень: NridgHt_NoRidge.

violinplot

Явные вопросы:

  • Есть ли лучший способ получить медиану logSalePrice для каждого уровня, кроме этого:
response = np.log(houseData['SalePrice'])
feature = pd.concat([houseData, response], axis = 1)
levels = feature.groupby(['Neighborhood']).describe()
median = levels['logSalePrice', '50%'].sort_values(ascending=False)
median
  • Возможно ли групповые уровни основаны на медиане? (псевдокод ниже)
if abs(median('CollgCr') - median('Veenker')) < threshold:
    merge('CollgCr', 'Veenker')

Ожидаемый результат - 10 уровней в houseData['Neighborhood'].unique(), причем на каждом уровне медианы имеют как минимум пороговое значение.

Надеюсь, я четко объяснил свою проблему, кто-то может указать мне правильное направление?

...