В чем разница между Gini coefficient и Gini impurity


Многие путаются в коэффициентах Джини, не понимают, что они бывают разные и для разных задач (и названия у них разные — просто в русском переводе, как всегда, многое схлопывается в один термин).

Есть коэффициент/индекс Джини (Gini coefficient), который используют при оценке качества классификации и регрессии. На русской странице Wiki не очень информативно, но вот на английской всё подробно: изначально это был статистический показатель степени расслоения общества данной страны или региона по отношению к какому-либо изучаемому признаку. Вычисляется как отношение площади фигуры, образованной кривой Лоренца и кривой равенства, к площади треугольника, образованного кривыми равенства и неравенства. Сейчас поясню.

Допустим, в компании работают 4 человека с суммарным доходом 8000$. Равномерное распределение дохода — это 2000$+2000$+2000$+2000$, неравномерное — 0$+0$+0$+8000$. А как оценить неравномерность, скажем, для случая 1000$+1000$+2000$+4000$? Упорядочим сотрудников по возрастанию дохода. Построим кривую (Лоренца) в координатах [процент населения, процент дохода этого населения] — идём по всем сотрудникам и откладывает точки. Для первого — [25%, 12.5%] — это сколько он составляет процентов от всего штата и сколько процентов составляет его доход, для первого и второго — [50%, 25%] — это сколько они составляют процентов и сколько процентов их доход, для первых трёх — [75%, 50%], для всех — [100%, 100%].

Рис. 1. Вычисление gini с помощью кривой Лоренца

На. Рис. 1. построенная кривая Лоренца показана красным цветом. Кривая Лоренца, которая соответствует равномерному распределению дохода, — синяя диагональ (т.н. кривая равенства). Кривая Лоренца, которая соответствует неравномерному распределению, — зелёная (т.н. кривая неравенства). Вот площадь A, делённая на A+B=0.5, и есть коэффициент Gini.

При оценке качества классификации GINI = 2*AUCROC-1. Про AUCROC я уже как-то писал. Почему это они так связаны нигде подробно не описано. Я нашёл упоминание в работе Supervised Classification and AUC. Там всё логично: если в задаче классификации на два класса 0 и 1 интерпретировать эти числа как доходы. Но чтобы связь была именно GINI = 2*AUCROC-1, должно быть что-то типа рис. 2 (но ROC-кривая и кривая Лоренца это не одно и то же), кстати в презентации Credit Scoring and the Optimization concerning Area under the curve такая же картинка.

Рис.2. Связь AUCROC и GINI.

Есть ещё коэффициент/индекс Джини (Gini impurity), который используется в решающих деревьях при выборе расщепления. Я дал ссылку на английскую Wiki, поскольку русского аналога нет. Он тоже измеряет «равномерность», если p_i — частоты представителей разных классов в листе дерева, то коэффициент Джини для него равен

Только вот это другая равномерность, никак не связанная с рассмотренной ранее. Для первой нужно два показателя — доход и численность населения с таким доходом, а тут только проценты (частоты). В английской версии на странице Gini coefficient написано «не путать с Gini impurity» и наоборот.

Я не знаю, как лучше переводить impurity, скажем, С.П.Чистяков переводит как «загрязненность» (на мой взгляд, не очень звучит…).

Коррадо Джини (Corrado Gini, 1884), который всё это придумал был итальянским статистиком. Но кроме этого, он известный идеолог фашизмa, написал книгу «Научные основы фашизма». Прожил, кстати, довольно много — 80 лет, видимо, после войны не преследовался. Вот так бывает…

Комментарии

admin:

Ещё хотелось бы задать вопрос про использование прироста информации или неопределенности Джини в деревьях и лесах. Сообщество Sklearn рекомендует для задач классификации использовать Джини (непонятно, почему, видимо, просто по опыту пришли к такому выводу). Или тут может быть такая подоплека, что неопределенность Джини напрямую связана с ROC AUC ( 2*AUC — 1), и тогда именно коэффициент неопределенности Джини предпочтителен для оценки обобщающей способности, если целевая метрика — AUC (или accuracy).
И кстати, есть ли какие-то теоретические основания «охотиться» за IG или Джини? Может, Вам известны работы, в которых показывается, что это приводит к минимизации ошибки обощения? Почему бы просто не максимизировать долю, если целевая метрика доля, логистическую ошибку, если она целевая и т.д? Все равно IG и Джини не монотонны и не антимонотонны, так что вычислительных преимуществ их использование не даёт.

admin:

Я думаю, что gini impurity предпочитают просто исходя из опыта. Там, собственно, выбор небольшой: Джини или энтропия. Мы как-то делали опыт: в явном виде максимизировали целевые функционалы при разбиении, особого выигрыша это не даёт.

Никакой AUC gini impurity не максимизирует. Во-первых, Джини и энтропия, в принципе, не стремятся «к идеальному разбиению». Если внимательно посмотреть на критерии расщепления, то там есть слагаемое, которое отвечает за «лучше бить пополам». Во-вторых, Вы невнимательно прочитали пост. Gini coefficient = 2*AUCROC — 1, но gini impurity никак не связан с Gini coefficient и с AUCROC. Они вообще придуманы для разных задач!

admin:

Добрый день.
А что все-таки посоветуете использовать новичкам в области машинного обучения?
Индекс Джини или энтропию?
Как я понимаю индекс Джини удобней считается и чем он больше, тем лучше мы разбиваем предикторы на более мелкие, а если он очень низкий получается, то следовательно предиктор разбить невозможно.
У меня стоит задача в огромной выборке находить сильные отклонения от средних значений в системе с огромным количеством независимых переменных (предикторов).
Каждая независимая переменная количественная: по шкале от 0 до 15.
Верно ли я понимаю, что нужно разбивать каждую шкалу на все меньшие отрезки и каждый раз смотреть либо на индекс Джини, он должен быть как можно выше или на энтропию, она должна быть как можно ниже.
И как только Джини перестает расти, а начинает снижаться, мы перестаем разбивать выборку.
Но как быть с выборкой, ведь мы не можем бесконечно делить ее, в какой-то момент количество случаев станет слишком мало, и мы не сможем достоверно посчитать Джини и энтропию.
Заранее спасибо.

admin:

На практике разница между ними небольшая — используйте, что удобнее.

А задачу Вашу не совсем понял… у вас много объектов и признаков, каждый признак принимает значения {0,1,…,15}. Теперь что надо найти? И главное — зачем? Это случайно не обнаружение аномалий (anomaly detection) — когда мы определяем объекты, не похожие на других в выборке?

admin:

Вкратце задача такая.
Есть огромная база игр, где игроки играют по равновесной стратегии, она предполагает примерно определённые проценты блефа, например 60%.
Но есть узкоспециальные ситуации, это набор определённых действий или сочетание карт, когда все игроки будут сильно отклоняться от данной равновесной стратегии и процент блефа например станет 10 или 80%.
Наборы действий и параметров закодированы параметрами в базе данных, а зависимая переменная в задаче -это будет то насколько близко и точно мы угадываем данные отклонения .
Например если на обучающей выборке мы нашли 3 ситуации отклонения от равновесной стратегии :10,20 и 90, а на тестовой в тех же ситуациях оно стало 11,21 и 89- то это хороший прогноз, а если 40,50 и 60, то прогноз плохой, неустойчивый и мы просто подстроились под обучающую выборку.

admin:

В данной ситуации мы не можем сказать при каком наборе параметров мы получим данное отклонение от равновесной игры.
Допустим параметр от 0 до 5 кодирует количество карт одной масти , а от 0 до 12 -номинал карт. Если мы будем брать слишком мелкие отрезки например от 0 до 1 карты одной масти и от 0 до 1 карты , то будем получать слишком мелкие выборки, которые будут делать неустойчивый прогноз , а если возьмём слишком большой : от 0 до 5 одинаковых карт и номинал от 0 до 12- то получим большую выборку , но в ней потеряем все узкочпециалированные закономерности.
Собственно вопрос как отсюда извлечь все устойчивые закономерности ? Пока у меня идея использовать одновременно коэффициент Джини + чтобы выборка была по правилу Харрела, не менее 20 случаев на независимую переменную , в данном примере 2*20=40, не менее 40 случаев . Я верно рассуждаю?

admin:

Если Вы хотите найти простые интерпретируемые закономерности, то, видимо, да — правильно. Если же просто настроить модель, которая что-то предсказывает (процент блефа, например), то сейчас такие модели строятся без особой оглядки на «мелкость категорий при разбиении». Типичный пример — модель случайного леса (я тут в блоге писал про неё).

admin:

Александр, здравствуйте. Когда-то читал Вашу статью и спустя какое-то время вернулся к этой теме. Если интересно, здесь с доказательством формулы про линейную зависимость джини и AUC: https://habrahabr.ru/company/ods/blog/350440/

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.