H2O增益/升降表

时间:2018-11-29 18:12:28

标签: response h2o

我的问题是关于H2O增益/提升表。我知道响应率是属于该组/箱的所有事件的比例。如何获取属于bin 1,bin 2等的数据? 我想看看相对于响应率,每个组/箱中关键变量的外观。

全面描述如何计算“收益/升降”表中的度量(公式)将是非常棒的

1 个答案:

答案 0 :(得分:0)

可在以下文件中找到增益和提升图的方程式:https://github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/hex/GainsLift.java

哪个显示:

E =事件总数

N =观察次数

G =小组人数(十等分代表十个,二等分位代表20个)

P =事件观测值的整体比例(P = E / N)

ei =第i组中的事件数,i = 1,2,...,G

ni =第i组中的观察数

pi =第i组中属于事件的观察值的比例(pi = ei / ni)

groups:硬编码为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

这是使用H2O-3 Python API的示例演练:

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个组,因为这是硬编码的默认行为。

  • 累积数据分数
  • 阈值概率值
  • 响应率(一组事件中观察的比例)
  • 累积响应率
  • 事件捕获率
  • 累积捕获率
  • 收益(事件的总比例与观察到的观察结果比例之间的百分比差异)
  • 累积收益

如果我只想要十分位数怎么办

默认情况下,“增益和提升表”为您提供的只是十等分或小数,这意味着您有更大的灵活性来选择感兴趣的百分位数。

让我们举个例子来说明一下。在此示例中,我们看到我们可以从第6行开始,跳过第7行,然后采用其余的行来获取我们的decil。

由于增益和提升表返回了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
如果我只想让小朋友们怎么办

也可以选择这些内容,所以下一步进行操作。

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