2치 분류 모델의 예측 값을 확률로 사용할 때Calibration이 필요합니다

14233 단어 Python
2치 분류모델의 예측치를 확률로 사용할 때 캘리버레이션이 필요할 것 같아 조사했다.

개요


이른바 Calibration


광고조회수(CTR) 예측 등 2치 분류모델의 예측치를 확률로 사용할 때 필요한 수정 처리다.

Calibration이 필요한 이유는 무엇입니까?


기계 학습 모델은 데이터 학습 경향을 예측하지만 2치 분류 모델 학습은 {0,1}의 분류 결과이지 분류 확률이 아니다.
학습한 모델에 미지의 데이터를 제공해 예측하면 0.0~1.0 사이의 소수점을 얻을 수 있으나 이는 예측 결과일 뿐 확률이 아니다.
예를 들어 예측 결과가 0.1인 데이터를 수집하더라도 목표 변수의 평균치가 0.1 미만인 경우도 있다.
또한 학습 데이터에 포함된 것은 분류 결과이지 분류 확률이 아니다.
분류 확률의 학습 데이터를 명확하게 수집하기 위해서는 사용자에 대한 설문 조사 등 방법이 필요하다.
다음 그림은 주요 기계 학습 모델의 예측치와 실제 성과(확률)의 시뮬레이션 결과를 비교했다.予測値=確率라면 모든 선이 비스듬한 허선에 배열되어야 하는데 실제로는 비스듬하다.
다만, 학습할 때 처리 확률Logistic모델을 명확히 하는 것은 그다지 진실하지 않다.

(참조)"Probability Calibration"

어떻게Calibration?


두 가지 방법이 있다.
1. Sigmoid RegressionLogistic 모델을 사용하여 실수가 적은 이유세부내용 생략)
2. Isotonic Regression 사용(이번에는 이쪽으로)
이번에 사용된 것은 데이터가 1000개 이상일 경우 권장google 등 주요 회사가 실제 사용하는 아이소토닉 리그레이션이다.

Isotonic Regression이란?


자유 형식의 선을 일련의 관측 값에 적용하는 방법
(wikipedia)
Isotonic Regression은 회귀 분석 중 하나입니다.
입력이 클수록 출력이 커지고 단조롭게 증가하는 가설에서 분류 예측치를 실제 값을 바탕으로 하는 확률로 수정한다.

(위키백과에서 온)
위의 예는 목표 변수가 연속값인 경우이지만 {0,1}의 이산값인 경우 어떤 행동을 취할지 확인합니다.
따라서 시뮬레이션을 진행한다.

모방하다


라이브러리 설치

import numpy as np
import plotly.express as px
import pandas as pd

from sklearn.isotonic import IsotonicRegression

문제 설정


이번에는 광고의 조회수 예측을 고려한다.
  • 실제 CTR은 평균 0.5에서 표준 편차 0.3의 정적 분포로 발생
  • 샘플 사이즈는 1000
  • [0.0, 1.0]로 클립
  • ctr_prob = np.random.normal(loc=0.5, scale=0.3, size=1000).clip(0.0, 1.0)
    ctr_prob.sort() # Isotonic Regressionを学習させるには、まず予測値をソートする必要がある
    click = np.array([np.random.choice([0,1], size=1, p=[1-p, p]) for p in ctr_prob]).flatten()
    
    px.scatter(
        pd.DataFrame({
        "x": ctr_prob,
        "y": click}),
        x="x",
        y="y",
        opacity=0.3,
        height=300, width=600  
    )
    
    실제 CTR에 따라 클릭이 생성되면 다음과 같습니다.

    CTR 예측 값이 잘못되지 않은 경우


    CTR 예측치가 실제 CTR과 일치할 경우 Isotonic Regression 학습 연결(0, 0), (1, 1)의 직선입니다.
    ir = IsotonicRegression(
        y_min=0.0,
        y_max=1.0,
        increasing=True,
        out_of_bounds="clip"
    )
    
    ctr_calibrated = ir.fit_transform(ctr_prob, click)
    
    fig = px.line(pd.DataFrame({
        "ctr_prob": ctr_prob,
        "ctr_calibrated": ctr_calibrated
    }), x="ctr_prob", y="ctr_calibrated")
    fig.add_trace(
        px.scatter(
            pd.DataFrame({
                "ctr_prob": ctr_prob,
                "ctr_calibrated": click
            }),
            x="ctr_prob",
            y="ctr_calibrated",
            opacity=0.3,
        ).data[0]
    )
    fig.show()
    

    CTR 예측치는 실제 CTR과 일치합니다.
    따라서 calibration 값을 더해도 별다른 변화가 없다.

    CTR 예측 값이 잘못되었을 때


    CTR 예측 값이 적절하게 잘못되었습니다.
    ctr_prob_distorted = np.log(1+ctr_prob*10)/2.5
    
    px.line(
        pd.DataFrame({
          "ctr": ctr_prob,
          "ctr_prob_distorted": ctr_prob_distorted}),
        x="ctr",
        y="ctr_prob_distorted"
    )
    

    Isotonic Regression을 학습하려면 잘못된 예측치와 광고 게시 실적을 사용합니다.
    모델이 잘못된 CTR 예측 값을 보정할 수 있는지 확인합니다.
    ctr_calibrated = ir.fit_transform(ctr_prob_distorted, click)
    
    fig = px.line(pd.DataFrame({
        "ctr_prob_distorted": ctr_prob_distorted,
        "ctr_calibrated": ctr_calibrated
    }), x="ctr_prob_distorted", y="ctr_calibrated")
    fig.add_trace(
        px.scatter(
            pd.DataFrame({
                "ctr_prob_distorted": ctr_prob_distorted,
                "ctr_calibrated": click
            }),
            x="ctr_prob_distorted",
            y="ctr_calibrated",
            opacity=0.3,
        ).data[0]
    )
    fig.show()
    

    Isotonic Regression은 방금 비뚤어진 커브와 반대입니다.
    예를 들어, ctr_prob_distorted=0.6의 경우ctr_calibrated=0.4입니다.
    이는 오류ctr_prob_distorted=0.6 이전 값ctr=0.35에 근접한 값이다.
    Isotonic Regression에서 학습한 곡선을 통해 알 수 있듯이 잘못된 CTR 예측 값이 실제 CTR로 수정되었습니다.

    총결산

  • 분류된 기계학습의 예측치를 확률로 처리할 때Calibration
  • 이 필요하다
  • Calibration을 수행하는 방법 중 하나에는 Isotonic Regression
  • 이 있습니다.
  • 2치 분류 임무에서 시뮬레이션을 실시한 후 Isotonic Regression은 예측치를 확률로 사용할 때의 오류를 수정할 수 있다
  • 참고 자료


    (마이크로 주소) "CTR 예측에 대한 확률 보정"
    (Alexandru Niculescu-Mizil, 2005) "Predicting Good Probabilities With Supervised Learning"
    (Google, 2013) "Ad Click Prediction: a View from the Trenches"
    (scikit-learn) "1.16. Probability calibration"

    좋은 웹페이지 즐겨찾기