Связывание результатов Sagemaker с входными столбцами - PullRequest
0 голосов
/ 26 марта 2020

Я использую Sagemaker XGBoost для построения моей модели классификации. Я пытаюсь сравнить «фактические данные» с «прогнозами» по 10 БИН риска.

Модель уже обучена и развернута.

Вот мои столбцы входных данных:

EID, ACTUAL, INPUT1, INPUT2, INPUT3, INPUT4, INPUT 5

Вот мой код:

import json
import io
from urllib.parse import urlparse

def get_csv_output_from_s3(s3uri, file_name):
    parsed_url = urlparse(s3uri)
    bucket_name = parsed_url.netloc
    prefix = parsed_url.path[1:]
    s3 = boto3.resource('s3')
    obj = s3.Object(bucket_name, '{}{}'.format(prefix, file_name))

    return obj.get()["Body"].read().decode('utf-8')   


# content_type / accept and split_type / assemble_with are required to use IO joining feature
transform_job.assemble_with = 'Line'
transform_job.accept = 'text/csv'

# start a transform job
transform_job.transform(new_tenure_input_full_path, split_type='Line', content_type='text/csv', input_filter='$[1:]', join_source='Input', output_filter="$[0,-1]")
transform_job.wait()

output_n = get_csv_output_from_s3(output_full_path,'Output.csv.out')
df = pd.read_csv(io.StringIO(output_n), sep=",", names=['EID', 'RAW_SCORE'])

out, bins = pd.qcut(df['RAW_SCORE'], q=10, retbins=True)

# Group events into count
counts = []
for lower, upper in zip(bins[:-1], bins[1:]):
    bin_data = df.query(f'{lower} < RAW_SCORE <= {upper}')
    events_count= sum(bin_data['ACTUAL'])
    emp_count = bin_data.shape[0]
    counts.append({"events_count": events_count, "emp_count": emp_count, "upper_limit": upper, "lower_limit": lower})

Биннинг работает нормально.

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

Это нужно сделать в этой строке:

input_filter='$[1:]', join_source='Input', output_filter="$[0,-1]"

Как мне это сделать?

...