Reference

class risksutils.visualization.InteractiveIsotonic(data, pdims, tdims, ddims=None, gdims=None, calibrations_data=None)[исходный код]

Интерактивная визуализация точности прогноза вероятности

Аргументы

data : pandas.DataFrame
таблица с данными
pdims : list
список названий столбцов с предсказаниями
tdims : list
список названий столбцов с целевыми переменными
ddims : list
список названий столбцов с датами
gdims : list
список названий столбцов с категориальными полями
calibrations_data : pandas.DataFrame

таблица содержащая калибровки прогноза в целевые переменных tdims должна содержать столбец c именем predict

tdims = ['t1', 't2']
calibrations_data = pd.DataFrame({
    'predict': [0, 0.3, 0.6],
    't1': [0, 0.1, 0.2],
    't2': [0, 0.4, 0.8]
})

если аргумент задан, то на диаграммах isotonic будут присутствовать графики калибровок

Результат

diagram

объект с набором связанных интерактивных диаграмм

isotonic : hv.DynamicMap
зависимость частоты наступления события от прогноза. Содержит виджеты для каждого выбора прогноза (pdims) и для выбора целевой переменной (tdims)

обращаться к диаграммам нужно, как к атрибутам

diagram.isotonic

доступны диаграммы для категориальных полей, указанных в gdims, и для временных, указанных в ddims обращаться к ним можно по имени, например

ddims = ['request_dt', 'response_dt']
diagram.request_dt
diagram.response_dt

на данных диаграммах можно указать подвыборку, с помощью виджетов диаграмм bokeh, тогда пересчитаются и все оставшиеся диаграммы

risksutils.visualization.cross_tab(df, feature1, feature2, target, num_buck1=10, num_buck2=10, min_sample=100, compute_iv=False)[исходный код]

Кросстабуляция пары признаков и бинарной целевой переменной

Аргументы

df : pandas.DataFrame
таблица с данными
feature1 : str
название признака 1
feature2 : str
название признака 2
target : str
название целевой переменной
num_buck1 : int
количество бакетов для признака 1
num_buck2 : int
количество бакетов для признака 2
min_sample : int
минимальное количество наблюдений для отображение доли целевой переменной в ячейке
compute_iv : bool
нужно ли рассчитывать information value для признаков

Результат

(rates, counts) : (pandas.Styler, pandas.Styler)

risksutils.visualization.distribution(df, feature, date, num_buck=10, date_freq='MS')[исходный код]

График изменения распределения признака по времени

Аргументы

df : pandas.DataFrame
таблица с данными
feature : str
название признака
date : str
название поля со временем
num_buck : int
количество бакетов
date_ferq : str
Тип агрегации времени (по умолчанию „MS“ - начало месяца)

Результат

spreads : holoviews.NdOverlay

risksutils.visualization.isotonic(df, predict, target, calibrations_data=None)[исходный код]

Визуализация точности прогноза вероятности

Аргументы

df : pandas.DataFrame
таблица с данными
predict : str
прогнозная вероятность
target : str
бинарная (0, 1) целевая переменная
calibrations_data : pandas.DataFrame
таблица с калибровками

Результат

area * curve * [curve] : holoviews.Overlay

risksutils.visualization.woe_line(df, feature, target, num_buck=10)[исходный код]

График зависимости WoE от признака

Аргументы

df : pandas.DataFrame
таблица с данными
feature : str
название признака
target : str
название целевой переменной
num_buck : int
количество бакетов

Результат

scatter * errors * line : holoviews.Overlay

risksutils.visualization.woe_stab(df, feature, target, date, num_buck=10, date_freq='MS')[исходный код]

График стабильности WoE признака по времени

Аргументы

df : pandas.DataFrame
таблица с данными
feature : str
название признака
target : str
название целевой переменной
date : str
название поля со временем
num_buck : int
количество бакетов
date_ferq : str
Тип агрегации времени (по умолчанию „MS“ - начало месяца)

Результат

curves * spreads : holoviews.Overlay

risksutils.metrics.information_value(df, feature, target, num_buck=10)[исходный код]

information value признака с целевой переменной target

Аргументы

df : pandas.DataFrame
таблица с данными
feature : str
признак
target : str
целевая переменная
num_buck : numeric
количество бакетов

Результат

information value : float

Пример использования

>>> import pandas as pd
>>> df = pd.DataFrame({'foo': [1, 1, 1, np.nan, np.nan],
...                    'bar': [0, 0, 1, 0, 1]})
>>> information_value(df, 'foo', 'bar')
0.11552453009332433
risksutils.metrics.information_value_binormal(auc)[исходный код]

information value из бинормального приближения через AUC

Аргументы

AUC : float
Area Under Roc Curve

Результат

information value : float

Пример использования

>>> information_value_binormal(0.5)
0.0
risksutils.metrics.stability_index(df, feature, date, num_buck=10, date_freq='MS')[исходный код]

Stability index для всех последовательных пар дат

Аргументы

df : pandas.DataFrame
таблица с данными
feature : str
признак
date : str
название поля со временем
num_buck : numeric
количество бакетов
date_ferq : str
Тип агрегации времени (по умолчанию „MS“ - начало месяца)

Результат

pd.Series

Пример использования

>>> df = pd.DataFrame({
...     'dt': pd.Series(['2000-01-01', '2000-01-01', '2000-01-01',
...                      '2000-02-01', '2000-02-02', '2000-02-01',
...                      '2000-04-02', '2000-04-03'],
...                     dtype='datetime64[ns]'),
...     'foo': ['a', 'a', np.nan, 'a', 'b', 'b', 'a', 'b']
... })
>>> stability_index(df, 'foo', 'dt')
dt
2000-02-01    6.489979
2000-04-01    0.115525
Name: si, dtype: float64
risksutils.models.recalibration(df, features, target, target_calibration=None, calibrations_data=None, offset=None, use_bias=True)[исходный код]

Построение логистической регрессии с калибровкой

Обычная лог регрессия строится зависимость прогноза вероятности от линейной комбинации признаков в виде:

prob = 1 / (1 + exp(- logit))

В данной функции есть возможность добавить кусочно линейное преобразование в конце - calibration:

prob = calibration(1 / (1 + exp(- logit)))

При обучении линейной комбинации признаков для расчета logit можно добавить к ним снос (offset), который не будет обучаться

Аргументы

df : pandas.DataFrame
таблица с данными
features : list или str

набор признаков в виде списка название полей, например

['f0', 'f1', 'f2', 'f3']

или описание столбцов в виде patsy формулы, например

'f0 + f1 + C(f2) + I(np.log(f3))'

в данном случае f2 - будет категориальным признаком, а от f3 будет взят логарифм

target : str
название целевой переменной
target_calibration : str
название целевой переменной в которую нужно будет калибровать формулу
calibrations_data : pandas.DataFrame
таблица с соотношением калибровок вероятностей должна содержать столбцы target_calibration и target
offset : str
название поля для сноса
use_bias : bool
нужно ли обучать константу

Результат

model : statmodels.model

для просмотра результатов нужно выполнить

model.summary()

коэффициенты доступны

model.params