Driverless AI: 신용 카드 데모¶
이 노트북은 Driverless AI 워크플로우와 유사한 모델 구축 및 스코어링의 H2OAI 클라이언트 워크플로우를 제공합니다.
다음은 Python Client Documentation 입니다.
워크플로우 단계¶
Build an Experiment with Python API:
로그인
학습 및 테스트 세트/새로운 데이터 가져오기
실험 매개변수를 지정하십시오
실험 시작
실험 평가
예측 다운로드
Build an Experiment in Web UI and Access Through Python:
실험에 대한 포인터 획득
Score on New Data:
H2OAI 모델을 사용하여 새로운 데이터 스코어링
Model Diagnostics on New Data:
H2OAI 모델을 사용하여 새로운 데이터에 대한 모델 진단 실행
Run Model Interpretation
원시 특성에 대한 모델 해석 실행
외부 모델 예측에 대한 모델 해석 실행
Build Scoring Pipelines
Python Scoring Pipeline 빌드
MOJO Scoring Pipeline 빌드
Python API를 사용하여 실험 빌드¶
1. 로그인¶
필수 모듈을 가져오고 로그인합니다.
Driverless AI 서버로 보낼 인증 토큰을 생성하는 클라이언트 클래스를 통해 자격 증명을 패스합니다. 일반 영어: Driverless AI 웹 페이지에 로그인하기 위해서는(그 후, Driverless Server로 요청을 전송합니다) Driverless AI 주소 및 로그인 자격 증명을 사용하여 클라이언트 클래스를 인스턴스화합니다.
[2]:
import driverlessai
import matplotlib.pyplot as plt
import pandas as pd
[3]:
address = 'http://ip_where_driverless_is_running:12345'
username = 'username'
password = 'password'
dai = driverlessai.Client(address = address, username = username, password = password)
# make sure to use the same user name and password when signing in through the GUI
2. 데이터 세트 업로드¶
Driverless AI /data 폴더에서 학습 및 테스트 데이터 세트를 업로드하십시오.
실험을 위한 학습, 검증 및 테스트 데이터 세트를 제공할 수 있습니다. 검증 및 테스트 데이터 세트는 옵션입니다. 해당 예제에서는 학습 및 테스트만을 제공합니다.
[4]:
train_path = 's3://h2o-public-test-data/smalldata/kaggle/CreditCard/creditcard_train_cat.csv'
test_path = 's3://h2o-public-test-data/smalldata/kaggle/CreditCard/creditcard_test_cat.csv'
train = dai.datasets.create(data=train_path, data_source='s3')
test = dai.datasets.create(data=test_path, data_source='s3')
Complete 100.00% - [4/4] Computing column statistics
Complete 100.00% - [4/4] Computing column statistics
Driverless의 해당 단계: 학습 및 테스트 CSV 파일 업로드¶
3. 실험 매개변수 설정¶
이제 실험의 매개변수를 설정하게 됩니다. 몇몇 매개변수는 다음과 같습니다.
대상 열: 예측하고자 하는 열입니다.
삭제된 열: ID 열, 데이터 유출이 있는 열 등과 같은 예측 변수로 사용하지 않는 열.
가중치 열: 행별 관측 가중치를 나타내는 열로, 《None》인 경우, 각 행의 관측 가중치는 1이 됩니다.
폴드 열: 폴드를 나타내는 열로
None
인 경우 Driverless AI에 의해 폴드가 결정됩니다.Time Series: 실험이 time series 유스케이스인지 여부 확인.
실험 설정에 관한 더 자세한 내용은 Experiment Settings 을 참조하십시오.
해당 예제에서는 ``default payment next month`` 를 예측합니다. 실험 프로세스를 통제하는 매개변수는 accuracy
, time
및 interpretability
입니다. get_experiment_preview_sync
함수를 사용하여 실험 중에 일어날 일에 대해 예측이 가능합니다.
accuracy
, time
및 interpretability
이 모두 5로 설정되어 있을 때 실험이 어떻게 나타나는지 확인하는 것으로 시작합니다.
[5]:
target = "DEFAULT_PAYMENT_NEXT_MONTH"
exp_preview = dai.experiments.preview(train_dataset=train,
task='classification',
target_column=target,
enable_gpus=False,
accuracy=5,
time=5,
interpretability=5,
config_overrides=None)
exp_preview
ACCURACY [5/10]:
- Training data size: *23,999 rows, 25 cols*
- Feature evolution: *[Constant, LightGBM, XGBoostGBM]*, *1/4 validation split*
- Final pipeline: *Ensemble (8 models), 4-fold CV*
TIME [5/10]:
- Feature evolution: *4 individuals*, up to *66 iterations*
- Early stopping: After *10* iterations of no improvement
INTERPRETABILITY [5/10]:
- Feature pre-pruning strategy: None
- Monotonicity constraints: disabled
- Feature engineering search space: [CVCatNumEncode, CVTargetEncode, CatOriginal, Cat, ClusterDist, ClusterTE, Frequent, Interactions, NumCatTE, NumToCatTE, NumToCatWoE, Original, TextLinModel, Text, TruncSVDNum, WeightOfEvidence]
[Constant, LightGBM, XGBoostGBM] models to train:
- Model and feature tuning: *16*
- Feature evolution: *104*
- Final pipeline: *8*
Estimated runtime: *minutes*
Auto-click Finish/Abort if not done in: *1 day*/*7 days*
이러한 설정을 통해 Driverless AI 실험은 약 124개의 모델을 학습하게 됩니다. * 16개의 모델 및 특성 튜닝 * 104개의 특성 진화 * 8개의 최종 파이프라인
실험 시작 시, 다음 중 하나를 수행할 수 있습니다.
매개변수 지정
Driverless AI를 사용한 매개변수 제안
Driverless AI는 데이터 세트 및 대상 열을 기초로 매개변수를 제안할 수 있습니다. 아래에서는 ``get_experiment_tuning_suggestion`` 을 사용하여 Driverless AI가 제안하는 설정을 확인합니다.
가장 좋은 매개변수를 위해 Driverless AI는 ``accuracy = 5``, ``time = 4``, ``interpretability = 6`` 로 설정해야 한다는 것을 발견했습니다. ``AUC`` 를 scorer로 선택했습니다(이항 문제의 기본 scorer입니다).
Driverless의 해당 단계 : 노브 설정, 구성 및 실행¶
4. 실험 시작: 변수 가공 + 최종 모델 학습¶
Driverless AI가 제안한 매개변수 및 추가 테스트 세트, scorer 및 시드를 사용하여 실험을 시작합니다. 제안된 매개변수로 실험을 시작하거나 직접 만들 수 있습니다.
[7]:
ex = dai.experiments.create(train_dataset=train,
test_dataset=test,
target_column=target,
task='classification',
accuracy=5,
time=4,
interpretability=6,
scorer="AUC",
enable_gpus=True,
seed=1234,
cols_to_drop=['ID'])
Experiment launched at: http://localhost:12345/#experiment?key=b7aba0d4-e235-11ea-9088-0242ac110002
Complete 100.00% - Status: Complete
5. 실험 평가¶
검증 데이터 세트의 최종 모델 점수를 확인하십시오. 변수 가공이 완료되면 accuracy 설정에 따라 앙상블 모델을 구축할 수 있습니다. 실험 개체에는 해당 앙상블 모델에 대한 검증 및 테스트 데이터에 대한 점수도 포함됩니다. 이러한 경우 검증 점수는 학습 교차 검증 예측의 점수입니다.
[11]:
metrics = ex.metrics()
print("Final model Score on Validation Data: " + str(round(metrics['val_score'], 3)))
Final model Score on Validation Data: 0.774
6. 결과 다운로드¶
실험 완료 시, UI에 다음 항목의 다운로드 가능 여부 옵션이 표시됩니다.
예측
(홀드 아웃) 학습 데이터
테스트 데이터
실험 요약 - 특성 중요도를 포함한 실험 요약
아래에서 테스트 예측의 다운로드 예제를 확인하십시오. 학습(홀드 아웃) 예측의 다운로드를 위해 등가 명령을 실행해야 할 수도 있습니다.
[12]:
ex.artifacts.download(only=['test_predictions'], dst_dir='', overwrite=True,)
Downloaded 'test_preds.csv'
[12]:
{'test_predictions': 'test_preds.csv'}
[13]:
test_preds = pd.read_csv("./test_preds.csv")
test_preds.head()
[13]:
DEFAULT_PAYMENT_NEXT_MONTH.0 | DEFAULT_PAYMENT_NEXT_MONTH.1 | |
---|---|---|
0 | 0.299739 | 0.700261 |
1 | 0.862815 | 0.137185 |
2 | 0.958172 | 0.041828 |
3 | 0.599148 | 0.400852 |
4 | 0.882068 | 0.117932 |
웹 UI에서 실험 빌드 및 Python을 통한 액세스¶
Python API를 사용하여 실험 키를 사용하여 웹 UI를 통해 시작된 실험을 검사해야 할 수도 있습니다.
1. 실험에 대한 포인터 획득¶
웹 UI에서 실험 키의 참조를 통해 실험에 대한 포인터를 획득할 수 있습니다.
[14]:
# Get list of experiments
experiment_list = dai.experiments.list()
experiment_list
[14]:
[<class 'driverlessai._experiments.Experiment'> b7aba0d4-e235-11ea-9088-0242ac110002 nivufeke,
<class 'driverlessai._experiments.Experiment'> aed84080-e234-11ea-9088-0242ac110002 sewateru]
[12]:
# Get pointer to experiment
exp = experiment_list[0]
exp
새로운 데이터 스코어링¶
Python API를 사용하여 새로운 데이터를 스코어링할 수 있습니다. 이는 웹 UI의 SCORE ON ANOTHER DATASET 버튼과 동일합니다. 아래 예제는 테스트 데이터를 스코어링하고 예측을 다운로드합니다.
기존 학습 세트와 동일한 열을 포함한 데이터 세트를 패스합니다. H2OAI 모델 구축 단계에서 테스트 세트를 패스한 경우에는 예측이 이미 존재합니다.
1. H2OAI 모델을 사용한 점수¶
다음은 테스트의 각 레코드에 대한 예상 불이행 확률을 나타냅니다.
[15]:
# Get unlabeled data to make predictions on
data = dai.datasets.create(data='s3://h2o-public-test-data/smalldata/kaggle/CreditCard/creditcard_test_cat.csv',
data_source='s3',
force=True)
target = "DEFAULT_PAYMENT_NEXT_MONTH"
prediction = ex.predict(data, [target])
pred_path = prediction.download('.')
pred_table = pd.read_csv(pred_path)
pred_table.head()
Complete 100.00% - [4/4] Computing column statistics
Complete
Downloaded './b7aba0d4-e235-11ea-9088-0242ac110002_preds_01963cda.csv'
[15]:
DEFAULT_PAYMENT_NEXT_MONTH.0 | DEFAULT_PAYMENT_NEXT_MONTH.1 | |
---|---|---|
0 | 0.299739 | 0.700261 |
1 | 0.862815 | 0.137185 |
2 | 0.958172 | 0.041828 |
3 | 0.599148 | 0.400852 |
4 | 0.882068 | 0.117932 |
또한 pred_contribs = True
설정을 통하여 최종 예측에 대한 각 특성의 기여도를 획득할 수 있습니다. 이를 통해 각 특성이 예측에 미치는 영향에 대한 아이디어를 얻을 수 있습니다.
[16]:
prediction = ex.predict(data, [target], include_shap_values=True)
pred_contributions_path = prediction.download('.')
pred_contributions_table = pd.read_csv(pred_contributions_path)
pred_contributions_table.head()
Complete
Downloaded 'b7aba0d4-e235-11ea-9088-0242ac110002_preds_e92e68d4.csv'
[16]:
DEFAULT_PAYMENT_NEXT_MONTH.0 | DEFAULT_PAYMENT_NEXT_MONTH.1 | contrib_0_AGE | contrib_10_PAY_3 | contrib_11_PAY_4 | contrib_12_PAY_5 | contrib_13_PAY_6 | contrib_14_PAY_AMT1 | contrib_15_PAY_AMT2 | contrib_16_PAY_AMT3 | ... | contrib_45_CVTE:PAY_1:PAY_2:PAY_4.0 | contrib_46_WoE:AGE:LIMIT_BAL:PAY_1:PAY_2:PAY_3:PAY_5.0 | contrib_47_WoE:PAY_3:PAY_5:PAY_6.0 | contrib_48_ClusterTE:ClusterID20:PAY_1:PAY_4:PAY_5:PAY_AMT1:PAY_AMT6.0 | contrib_4_BILL_AMT4 | contrib_5_BILL_AMT5 | contrib_6_BILL_AMT6 | contrib_7_LIMIT_BAL | contrib_8_PAY_1 | contrib_bias | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.299739 | 0.700261 | -0.051685 | 0.017082 | -0.012476 | -0.023556 | -0.007033 | 0.016873 | 0.062995 | -0.037905 | ... | 1.314687 | 0.019138 | -0.039752 | -0.004087 | 0.043153 | -0.014567 | -0.024331 | 0.024522 | 0.526365 | -1.34867 |
1 | 0.862815 | 0.137185 | 0.044812 | 0.017206 | 0.001976 | 0.002324 | -0.001514 | 0.030999 | -0.087150 | -0.092674 | ... | -0.437666 | -0.079960 | -0.119075 | 0.008777 | 0.052826 | 0.019449 | 0.061261 | 0.138121 | -0.015459 | -1.34867 |
2 | 0.958172 | 0.041828 | -0.054909 | 0.003906 | -0.003241 | 0.002495 | -0.003469 | 0.087790 | -0.315745 | -0.047180 | ... | -0.455067 | 0.007856 | -0.103681 | 0.036041 | -0.032951 | 0.021452 | -0.060518 | -0.161278 | -0.015956 | -1.34867 |
3 | 0.599148 | 0.400852 | -0.003953 | 0.016077 | 0.002315 | 0.040801 | 0.007007 | 0.024191 | -0.020707 | 0.147297 | ... | 1.342796 | 0.066763 | 0.025450 | 0.003859 | -0.020837 | -0.050288 | 0.019743 | -0.096786 | 0.371450 | -1.34867 |
4 | 0.882068 | 0.117932 | 0.000450 | -0.038284 | -0.013007 | -0.001538 | -0.003652 | 0.036131 | 0.219968 | 0.124056 | ... | -0.519380 | -0.006065 | -0.109650 | -0.029302 | -0.116205 | 0.007022 | 0.004275 | 0.031202 | -0.016736 | -1.34867 |
5 rows × 53 columns
첫 번째 레코드에 대한 기여도를 좀 더 자세하게 살펴보겠습니다.
[17]:
contrib = pd.DataFrame(pred_contributions_table.iloc[0][1:])
contrib.columns = ["contribution"]
contrib["abs_contribution"] = contrib.contribution.abs()
contrib.sort_values(by="abs_contribution", ascending=False)[["contribution"]].head()
[17]:
contribution | |
---|---|
contrib_bias | -1.348670 |
contrib_45_CVTE:PAY_1:PAY_2:PAY_4.0 | 1.314687 |
DEFAULT_PAYMENT_NEXT_MONTH.1 | 0.700261 |
contrib_8_PAY_1 | 0.526365 |
contrib_21_CVTE:EDUCATION.0 | 0.140235 |
이 고객의 클러스터인 PAY_0
, PAY_2
및 LIMIT_BAL
이 예측에 제일 큰 영향을 미쳤습니다. 기여도가 양수이기 때문에 불이행 가능성이 높아집니다.
스코어링 파이프라인 빌드¶
마지막 섹션에서는 실험에서 스코어링 파이프라인을 빌드합니다. 두 가지 스코어링 파이프라인 옵션이 있습니다.
Python Scoring Pipeline: Python 런타임 필요
MOJO Scoring Pipeline: Java 런타임 필요
스코어링 파이프라인에 대한 문서는 http://docs.h2o.ai/driverless-ai/latest-stable/docs/userguide/python-mojo-pipelines.html 에서 제공됩니다.
해당 실험 화면에는 Download Python Scoring Pipeline 또는 Build MOJO Scoring Pipeline 의 두 가지 스코어링 파이프라인 버튼이 표시됩니다. Driverless AI는 config.toml 파일을 기초로 스코어링 파이프라인의 자동 빌드 여부를 결정합니다. 이 예제에서는 다음 설정을 통해 Driverless AI를 실행했습니다.
# Whether to create the Python scoring pipeline at the end of each experiment
make_python_scoring_pipeline = true
# Whether to create the MOJO scoring pipeline at the end of each experiment
# Note: Not all transformers or main models are available for MOJO (e.g. no gblinear main model)
make_mojo_scoring_pipeline = false
따라서 기본적으로 Python Scoring Pipeline만 빌드됩니다.
1. Python Scoring Pipeline 빌드¶
Python Scoring Pipeline은 기본적으로 config.toml 설정을 기초로 빌드되었지만 필요 시 재빌드가 가능합니다. 이것은 ``make_python_scoring_pipeline`` 옵션이 false로 설정된 경우 유용합니다.
[18]:
ex.artifacts.create('python_pipeline')
Building Python scoring pipeline...
이제 스코어링 파이프라인 zip 파일을 다운로드합니다.
[19]:
ex.artifacts.download(only='python_pipeline',
dst_dir='.',
overwrite=True)
Downloaded './scorer.zip'
[19]:
{'python_pipeline': './scorer.zip'}
2. MOJO Scoring Pipeline 빌드¶
MOJO Scoring Pipeline은 config.toml 설정 때문에 기본적으로 빌드되지 않았습니다. Python client를 이용하여 MOJO Scoring Pipeline을 빌드할 수 있습니다. 이것은 실험 화면에서 Build MOJO Scoring Pipeline 을 선택하는 것과 같습니다.
[61]:
ex.artifacts.create('mojo_pipeline')
이제 스코어링 파이프라인 zip 파일을 다운로드할 수 있습니다.
[63]:
ex.artifacts.download(only='mojo_pipeline', dst_dir='.', overwrite=True)
[63]:
'./mojo.zip'
일단 MOJO Scoring Pipeline이 빌드되면, Build MOJO Scoring Pipeline 이 Download MOJO Scoring Pipeline 으로 변경됩니다.
[ ]: