Это статистическая метрика, используемая для оценки предсказательной силы переменной в задачах бинарной классификации. Она особенно популярна в кредитном скоринге для выбора значимых признаков и отсечения неинформативных переменных.
Information Value измеряет, насколько хорошо независимая переменная (фича) может различать два класса (обычно «хороший» и «плохой»). Чем выше IV, тем лучше переменная разделяет классы. Эта метрика основана на распределении целевой переменной (target variable) в различных бинах (корзинах) значений независимой переменной.
Непрерывные переменные делятся на интервалы, а категориальные переменные остаются без изменений.
Для каждого бина вычисляются доли хороших (\(p_i\)) и плохих (\(q_i\)) примеров.
Формула WOE
WOE_i = \ln\left(\frac{p_i}{q_i}\right)
IV – это сумма произведений разности долей и WOE для каждого бина.
IV = \sum_{i} (p_i - q_i) \cdot WOE_i
Переменная неинформативна.
Переменная слабо информативна.
Переменная средней информативности.
Переменная высокой информативности.
Переменная очень высокой информативности.
Пример расчета
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}")
Ставь 👍 и забирай 📚 Базу знаний