H2O Gain / Lift стол - PullRequest
       8

H2O Gain / Lift стол

0 голосов
/ 29 ноября 2018

Мой вопрос касается таблицы усиления / подъема H2O.Я понимаю, что коэффициент отклика - это доля всех событий, которые попадают в группу / корзину.Как получить эти данные, которые попадают в корзину 1, корзину 2 и т. Д.? Я хочу посмотреть, как ключевые переменные выглядят в каждой группе / бине по отношению к частоте ответов.

Было бы здорово получить полное описание того, как меры в Gain / LiftТаблица рассчитана (по формулам)

1 Ответ

0 голосов
/ 04 декабря 2018

Уравнения для диаграммы усиления и подъема можно найти в этом файле: https://github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/hex/GainsLift.java

Который показывает:

E = общее количество событий

N =количество наблюдений

G = количество групп (10 для децилей или 20 для полудицилей)

P = общая доля наблюдений, являющихся событиями (P = E / N)

ei = количество событий в группе i, i = 1,2, ..., G

ni = количество наблюдений в группе i

pi = доля наблюдений в группеi, которые являются событиями (pi = ei / ni)

группы: жестко запрограммированы в 16;если имеется менее 16 уникальных значений вероятности, то число групп уменьшается до количества уникальных квантильных порогов.

доля накопленных данных = sum_n_i / N

lower_threshold = устанавливается квантильными ячейками

lift = pi / P

cumulative_lift = (Σiei / Σini) /P

response_rate = 100 * pi

cumulative_response_rate = 100 * Σiei / Σini

capture_rate = 100 * ei / E

cumulative_capture_rate = 100 * Σiei /E

усиление = 100 * (лифт-1)

cumulative_gain = 100 * (sum_lift-1)

average_response_rate = E / N

Так вотВот пример пошагового руководства с использованием API-интерфейса Python для H2O-3:

import h2o
import pandas as pd
import numpy as np
from h2o.estimators.gbm import H2OGradientBoostingEstimator
h2o.init()

# import and split the dataset
cars = h2o.import_file("https://s3.amazonaws.com/h2o-public-test-data/smalldata/junit/cars_20mpg.csv")

convert response column to a factor
cars["economy_20mpg"] = cars["economy_20mpg"].asfactor()

# set the predictor names and the response column name
predictors = ["displacement","power","weight","acceleration","year"]
response = "economy_20mpg"

# split dataset
train, valid = cars.split_frame(ratios=[.7],seed=1234)

# Initialize and train a GBM
cars_gbm = H2OGradientBoostingEstimator(seed = 1234)
cars_gbm.train(x = predictors, y = response, training_frame = train, validation_frame=valid) 

# Generate Gains and Lift Table
# documentation on this parameter can be found here:
# http://docs.h2o.ai/h2o/latest-stable/h2o-py/docs/model_categories.html?#h2o.model.H2OBinomialModel.gains_lift
gainslift = cars_gbm.gains_lift(train=False, valid=True, xval=False)

Обзор таблицы

Как и ожидалось, у нас 16 групп, поскольку это жестко заданное поведение по умолчанию.

  • Кумулятивные доли данных
  • Пороговое значение вероятности
  • Частота ответов (доля наблюдений, являющихся событиями в группе)
  • Кумулятивный коэффициент ответа
  • Событиекоэффициент захвата
  • совокупный коэффициент захвата
  • усиление (разница в процентах между общимдоля событий и наблюдаемая доля наблюдений, которые являются событиями в группе)
  • Совокупный выигрыш

Что если я хочу только децили

По умолчанию Gainsи Lift Table предоставляет вам больше, чем просто децили или вентили, что означает, что вы обладаете большей гибкостью, чтобы выбирать процентили, в которых вы заинтересованы.

Давайте рассмотрим пример получения наших децилей.В этом примере мы видим, что мы можем начать со строки 6, пропустить строку 7, а затем взять остальные строки, чтобы получить наши децили.

Поскольку таблица коэффициентов усиления и подъема возвращает таблицу TwoDimTable, мы можем использовать номера наших группв качестве индексов выбора.

# show gains and lift table data type
print('H2O Gains Lift Table is of type: ', type(gainslift))
H2O Gains Lift Table is of type:  <class 'h2o.two_dim_table.H2OTwoDimTable'>

# since this table is small and for ease of use let's covert to a pandas dataframe
pandas_gl = gainslift.as_data_frame()
pandas_gl.set_index('group')


gainslift_deciles = pandas_gl.iloc[pd.np.r_[5,7:16], :]
gainslift_deciles
Что делать, если я хочу только Ventile

Они также доступны для выбора, так что давайте сделаем это дальше.

gainslift_ventiles = pandas_gl.iloc[pd.np.r_[7,9,11,13,15], :]
gainslift_ventiles
...