Я использую 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]"
Как мне это сделать?