Обычно энтропия — мера хаоса. Но наш сегодняшний герой — IH-анализ (Information-Entropy analysis) — вычисляет информационную энтропию, чтобы измерить обратное: степень детерминированности связи между признаками и целевой переменной. Мы будем вычислять: насколько утверждение «если А, то Б, и, если не А, то и не Б» выполняется в наших данных устойчиво. Одновременная работа с категориальными и количественными признаками нас не затруднит.
Вы спросите: и что, твоя энтропия может справиться с такими проблемами:
одни признаки количественные, связь с Y явно нелинейная, и гипотезы о виде функции нет, другие категориальные;
более того — признаков много, измерены в разных шкалах: числа, названия категорий, интервалы, градации и т.д.;
да ещё и пропуски?
Как их вообще собрать вместе, в одну компанию, чтобы измерить совместное влияние на Y?
«В одну телегу впрячь не можно коня и трепетную лань».
А IH-анализ говорит: можем. И сейчас покажем как.
Подход IH-анализа к оценке взаимосвязи признаков: как с помощью меры хаоса — энтропии можно измерить степень взаимовлияния, упорядоченности и детерминированности связи X -> Y
Функциональная связь y = f(x) — это отображение множества значений x на множество значений y: x -> y, где каждому значению x соответствует единственное значение y.
Для решения задач классификации, предсказания, управления, оптимизации нашей реальной системы мы стремимся найти закономерности, ей присущие, через анализ ее исторических данных. Эти данные лишь в той или иной степени отражают нашу систему, являются её некоторым слепком. Сопоставляя значения x и y в датасете, мы обнаруживаем неопределённость: одному и тому же значению x соответствует несколько разных y, и наоборот — отображение x -> y является нечётким (размытым, fuzzy).
В качестве меры взаимосвязи признаков IH-анализ предлагает использовать степень отклонения связи x-y от функциональной — измерить степень нечёткости отображения x -> y.
Идея нечёткого множества: элемент принадлежит множеству с некоторой степенью принадлежности. Для нечётких отношений «если xi, то yj» в качестве меры принадлежности предлагаем использовать условную вероятность P(yj | xi) для каждой пары xi-yj. Если она близка к единице — связь почти детерминирована. Если к нулю — её почти нет.
Интегральная оценка для всего отображения X → Y. Здесь IH-анализ обращается к энтропии Шеннона.
Три шага — и мера готова:
H(Y) — полная неопределённость Y.
H(Y|X) — условная энтропия Y (остаточная неопределённость) после того, как мы узнали X.
I(X;Y) = H(Y) − H(Y|X) — взаимная информация, неэнтропия (антихаос!). Степень детерминированности, упорядоченности взаимосвязи X — Y.
Осталось нормировать, чтобы получить шкалу от 0 до 1:
R(Y|X) = I(X;Y) / H(Y)
Это и есть информационный показатель степени нечёткости отображения X → Y. Само отношение I/H восходит к Шеннону (1948), Бриллюэну (1960), в эконометрике известно как коэффициент неопределённости Тейла (1970). IH-анализ применяет его для оценки отклонения от функциональной связи для разнотипных признаков в исследуемом датасете.
Значения R лежат в интервале [0;1]:
-
0 — связи нет. Знание X ничего не говорит о Y.
-
1 — функциональная связь. X полностью определяет Y.
Что важно: мера R(Y|X) оценивает степень отклонения от функциональной связи в теоретическом понимании функции и не требует априорного задания вида функции. Работает одинаково для чисел и категорий — без one-hot encoding. Вычисляется как для отдельного признака X -> Y, так и для комбинаций (X₁, X₂, …, Xₖ) -> Y.
По сути, мы оцениваем степень детерминированности, упорядоченности структуры связи: «Если происходит событие А (причина), то происходит и событие В (следствие), и при этом если нет события А, то нет и события В» (A ⇒ B & ¬A ⇒ ¬B). Устойчивость означает, что это правило подтверждается многократно.
IH-анализ в некотором смысле дактилоскопия: мы не подгоняем функцию, не навязываем данным линейность или монотонность — мы снимаем отпечаток связи, которая уже есть в данных.
Подготовка данных
Настала пора обсудить: как технически мы будем вычислять меру R? Вот реальный датасет и наши действия. Как одновременно работать с числами количественных признаков и с категориями? Обычно данные «причёсывают»: нормализуют непрерывные переменные, заполняют пропуски, кодируют категории и пр. Мы поступим иначе: будем их «фотографировать» — наводить резкость.
Представьте фотографа XIX века. Тренога, камера, чёрная ткань. Объектив направлен не на человека, а на наш датасет — на таблицу с числами и категориями. Фотограф крутит кольцо. Изображение в видоискателе мутное, никакой структуры. Ещё поворот — и вдруг проступает узор: одни значения X устойчиво тяготеют к одним Y, другие к другим. Отображение X → Y обрело чёткость.
Как заметил физик Арнольд Зоммерфельд, если бы Кеплер опирался на точные данные, учитывающие все сложности взаимного влияния планет, он никогда бы не сформулировал свои законы. Именно огрубление данных Тихо Браге позволило увидеть главное.
В IH-анализе эта идея реализована через параметр резкость (sharpness). В реальных экспериментальных данных всегда присутствует погрешность измерения — и каждое значение корректно заменить интервалом. Интервал не может быть меньше ошибки измерения. Но кроме этого — переход от уникальных значений к интервалам позволяет взглянуть на данные с определённой «резкостью» и разглядеть в них не шум, а закономерность.
В текущей open-source реализации IH-анализа это устроено так.
Категориальные признаки — каждая уникальная категория получает целочисленное имя (0, 1, 2, …).
Количественные признаки — каждое значение заменяется на имя интервала, в который оно попало (0, 1, 2, …).
Пропуски — они получают отдельное имя и становятся таким же сигналом, как любое другое значение. Не требуют ни удаления, ни заполнения.
После такой подготовки в матрице данных вместо числовых значений, наименований категорий, пропусков — только их имена, целые числа. Мера R(Y|X) вычисляется по этой матрице одинаково для всего.
Для разных признаков мы можем задать различную резкость. Подбор оптимальной резкости для каждого признака — отдельная задача, которую решает критерий ICC в библиотеке ih-coverage. Мы покажем это в следующих статьях, а пока в демонстрации ниже используем фиксированную резкость — этого достаточно для первого знакомства.
Демонстрация
Мы добрались до цифр. Давайте посмотрим, как мера R(Y|X) работает на реальных данных.
📓 Ноутбук с кодом: открыть в Colab
Возьмём известный датасет Rain in Australia — 145 тысяч ежедневных метеонаблюдений от Австралийского Бюро Метеорологии. В нём 23 признака: числовые (температура, давление, влажность, скорость ветра) и категориальные (направление ветра, локация, был ли дождь сегодня). Целевая переменная — RainTomorrow: пойдёт ли дождь завтра.
Датасет вполне подходит для первого знакомства с IH-анализом: разнотипные признаки, много пропусков, интерпретация — область понятна, объём достаточен для устойчивых оценок. Однако колонку Date использовать как обычный признак нельзя — это временной ряд, последовательность чисел без физического смысла. Вместо неё мы извлекли месяц и день года и закодировали их циклически — через синус и косинус, чтобы сохранить естественную цикличность времён года.
Наша задача на этом этапе — выяснить, какие факторы связаны с дождём? Насколько сильно? Что работает только в комбинации? (Построение правил, классификация с помощью IH-анализа — тема следующей статьи.)
Полный код с загрузкой данных, подготовкой и расчётами — в приложенном ноутбуке. Здесь мы посмотрим ключевые результаты.
И да, сейчас будут сухие детали и подробности. Без них и приложенный ноутбук, и используемый нами open-source останутся чёрным ящиком, а мы этого не хотим.
Подготовку данных мы выполнили с помощью prepare_data — функции из нашего open-source инструментария. Она делает то, о чём мы говорили в предыдущем разделе: превращает числа в интервалы, категории — в коды, пропуски — в отдельное имя. На выходе — матрица имён, готовая к вычислению R(Y|X). Сейчас, чтобы не перегружать демонстрацию, мы применили её с фиксированной резкостью 0.25 для всех количественных признаков. В реальных расчётах для каждого признака мы задаём свою резкость, найденную функцией suggest_sharpness из нашего open-source инструментария.
Затем установили библиотеку ih-lib, вычислили энтропию целевой переменной H(Y) ≈ 0.76 и определили функцию calc_rxy, которая вычисляет R(Y|X) для любого набора признаков. Код этих шагов — в ноутбуке, здесь мы сразу перейдём к результатам.
Топ-5 признаков по R(Y|X):
| Признак | R(Y|X) | | — | — | | Humidity3pm | 0.1985 | | Sunshine | 0.1003 | | Cloud3pm | 0.0946 | | RainToday | 0.0799 | | Humidity9am | 0.0665 |
Мы видим, что признаки, взятые по одному, очень слабо связаны с целевой функцией. Humidity3pm = 0.1985 — это значит, что влажность в три часа дня объясняет около 20% структуры данных о дожде. Немало для одного признака, но явно недостаточно для предсказания. На другом конце шкалы — признаки с R < 0.01: MinTemp, Rainfall, Evaporation, WindSpeed. По отдельности они почти ничего не говорят о дожде. Но, как мы увидим дальше, в комбинации они могут усилить сигнал.
Синергия: когда признаки работают вместе
Одиночные признаки дают лишь часть картины. Реальные погодные явления определяются сочетанием условий. Насколько усиливается связь, когда мы берём не один признак, а группу?
Мы взяли топ-10 признаков по R(Y|X) и перебрали их комбинации — от одного до семи:
|
Размер группы |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|---|---|---|---|---|---|---|---|
|
R(Y|X) |
0.1985 |
0.2457 |
0.2806 |
0.3168 |
0.3706 |
0.4764 |
0.5881 |
Рост R с добавлением признаков — это и есть синергия: когда 1+1 даёт больше двух, потому что признаки не дублируют, а дополняют друг друга. Обычные корреляции такого не видят. Интересен масштаб роста: комбинация из семи признаков даёт R = 0.59 — примерно в 3 раза выше, чем лучший одиночный. Мы остановились на семи для наглядности: это демонстрация метода, а не решение задачи предсказания, и полный перебор 23 признаков здесь избыточен.
Лучшая комбинация из семи признаков: Humidity3pm + Sunshine + Cloud3pm + Humidity9am + Cloud9am + WindGustSpeed + Pressure3pm.
Дневная влажность, солнечное сияние, облачность, утренняя влажность, скорость ветра и давление — вместе они дают связь, которая значительно сильнее суммы отдельных составляющих. И это именно то, что IH-анализ позволяет увидеть: не просто измерить связь, но и понять, какие признаки работают в синергии. Код перебора комбинаций — в ноутбуке.
Мы утверждали, что верно выбранная резкость позволит нам точнее разглядеть закономерность. «Покрутим колёсико резкости нашего фотоаппарата» — проверим, как будет изменяться влияние дневной влажности на целевой признак. Проверим зависимость R(Y|X) для Humidity3pm при разных значениях резкости. Код и результат — в приложенном ноутбуке: мы видим, что выбранная нами резкость 0.25 и её результат (R=0.1985) — это и есть оптимальный масштаб: структура связи уже проявилась, дальнейшее уменьшение резкости добавит только шум.
Инструмент
Мы показали метод и работающий open-source код. Две библиотеки, которые мы использовали в этой статье, доступны на GitHub:
ih-prep — подготовка данных, которую мы описали в разделе про резкость. Сырой датасет → матрица имён (без one-hot encoding и заполнения пропусков).
ih-lib — вычислительное ядро. Энтропия, взаимная информация, R(Y|X) для отдельных признаков и их комбинаций. Всё, что вы видели в демонстрации, посчитано здесь.
Код, который мы запускали для этой статьи, лежит в приложенном ноутбуке. Можете воспроизвести шаг за шагом или сразу применить к своим данным.
Что дальше
В этой статье мы показали только одну грань IH-анализа — меру связи R(Y|X). Но метод умеет больше. В следующих статьях:
-
Автоматический подбор резкости. Мы использовали фиксированную резкость 0.25. Библиотека
ih-coverageумеет подбирать её индивидуально для каждого признака — через критерий ICC, который ищет золотую середину между детализацией и надёжностью. А функцияcheck_coverageдиагностирует, где интервалы пусты и оценки становятся статистически ненадёжными. -
Отбор наиболее существенных факторов. Не просто ранжирование по одиночному R, а поиск группы признаков, которая даёт максимум связности при минимуме сложности — через критерий структурной упорядоченности R_struct.
-
Построение решающих правил (rule-based classification). От измерения связи — к системе правил «ЕСЛИ-ТО». Функция
find_best_rulesдля каждого признака находит оптимальное бинарное разбиение, максимизирующее R(Y|X). Дальше эти правила объединяются в прозрачную систему — без чёрных ящиков.
Все эти возможности уже реализованы и ждут вас.
📓 Полный ноутбук-витрина (8 частей): открыть в Colab
Там — от сырых данных до интерпретируемых правил на двух датасетах (German Credit и Diamonds). Запускайте, экспериментируйте, подставляйте свои данные.
Попробуйте IH-анализ
Все библиотеки — на GitHub.
Если у вас есть данные и вы хотите найти в них закономерности — пишите. Обсудим пилотный проект. Telegram: @algol87 Email: agoldin@live.com
Ссылки
Статья: Голдин А.Р. Экстремальные алгоритмы информационного энтропийного анализа построения математического описания изучаемого объекта на основе обработки экспериментальных данных // Инновационные научные исследования. 2023. №3-1(27). С. 22-34.
GitHub:
-
ih-prep — подготовка разнотипных данных (категории + числа)
-
ih-lib — быстрая и масштабируемая библиотека энтропийного анализа
-
ih-coverage — автоматический подбор оптимальной дискретизации (ICC)
Все библиотеки работают в стандартном Python-стеке (Jupyter, pandas, scikit-learn) и могут обрабатывать большие массивы данных без потери производительности.
ссылка на оригинал статьи https://habr.com/ru/articles/1040980/