🤔 В чем смысл информейшен вэлью?



Это статистическая метрика, используемая для оценки предсказательной силы переменной в задачах бинарной классификации. Она особенно популярна в кредитном скоринге для выбора значимых признаков и отсечения неинформативных переменных.



🚩Основная идея



Information Value измеряет, насколько хорошо независимая переменная (фича) может различать два класса (обычно «хороший» и «плохой»). Чем выше IV, тем лучше переменная разделяет классы. Эта метрика основана на распределении целевой переменной (target variable) в различных бинах (корзинах) значений независимой переменной.



🚩Шаги для расчета



1⃣Разбиение переменной на бины (корзины)

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



2⃣Вычисление доли хороших и плохих в каждом бине

Для каждого бина вычисляются доли хороших (\(p_i\)) и плохих (\(q_i\)) примеров.



3⃣Вычисление Weight of Evidence (WOE) для каждого бина

Формула WOE

WOE_i = \ln\left(\frac{p_i}{q_i}\right)




4⃣Вычисление Information Value

IV – это сумма произведений разности долей и WOE для каждого бина.

IV = \sum_{i} (p_i - q_i) \cdot WOE_i




🚩Интерпретация



🟠IV < 0.02

Переменная неинформативна.

🟠0.02 <= IV < 0.1

Переменная слабо информативна.

🟠0.1 <= IV < 0.3

Переменная средней информативности.

🟠0.3 <= IV < 0.5

Переменная высокой информативности.

🟠IV >= 0.5

Переменная очень высокой информативности.



Пример расчета

import pandas as pd

import numpy as np



def calculate_iv(df, feature, target, bins=10):

df = df[[feature, target]].copy()

df['bin'] = pd.qcut(df[feature], bins, duplicates='drop')

grouped = df.groupby('bin')



total_good = (df[target] == 0).sum()

total_bad = (df[target] == 1).sum()



iv = 0

for name, group in grouped:

good = (group[target] == 0).sum() / total_good

bad = (group[target] == 1).sum() / total_bad

woe = np.log(good / bad)

iv += (good - bad) * woe



return iv



# Пример данных

data = {

'feature': [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000],

'target': [0, 0, 0, 1, 0, 1, 1, 0, 1, 1]

}

df = pd.DataFrame(data)



# Расчет IV

iv = calculate_iv(df, 'feature', 'target')

print(f"Information Value для 'feature': {iv:.4f}")




Ставь 👍 и забирай 📚 Базу знаний