2. 파이톤이 접미된 다변수 해석 5-1.논리 회귀 분석(scikit-learn)

  • 재회귀분석은 변수를 설명하는 여러 가지 회귀모델이 있고 목표 변수는 수치이다.이에 비해 물류 회귀 분석의 목적 변수는 유형 데이터이다.
  • 살지 말지, 모 회사의 부도 여부 등 유형(속성)을 처리한다.그리고 두 종류로 나눌 수 있을 뿐만 아니라 세 종류 이상으로 나눌 수 있다.
  • 예를 들어 사용자군을 효과적으로 구분할 수 있는 변수를 찾아내기 위해 개인 특성과 생활방식 특성에서 자기 회사와 다른 회사가 어떤 제품을 구매하고 싶은지 예측하는 것도 이런 목적에 사용할 수 있다.
  • 분류를 처리하는 알고리즘인데도 회귀라는 이름이 있으니 이해할 수 있을 것 같다.
  • 그러면 재회귀분석에서 우리는 예측치와 실측치 간의 오차를 최대한 줄이는 회귀계수를 발견했다.논리 회귀분석에서 목표는 예측치와 실제 측정치의 편차 확률(오답률)을 최소화하는 것이다.이것은 교차 엔트로피 오차라고 한다.
  • (1) 라이브러리 가져오기

    # データ加工・処理・分析ライブラリ
    import numpy as np
    import numpy.random as random
    import scipy as sp
    from pandas import Series, DataFrame
    import pandas as pd
    
    # 可視化ライブラリ
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import seaborn as sns
    %matplotlib inline
    
    # 機械学習ライブラリ
    import sklearn
    
    # 小数第3位まで表示
    %precision 3
    

    (2) 데이터 획득 및 읽기

    # データを取得
    url = 'https://raw.githubusercontent.com/yumi-ito/datasets/master/datasets_adult.csv'
    
    # 取得したデータをDataFrameオブジェクトとして読み込み
    df = pd.read_csv(url, header=None)
    
    # 列ラベルを設定
    df.columns = ['age', 'workclass', 'fnlwgt', 'education', 'education-num', 
                  'marital-status', 'occupation', 'relationship', 'race', 'sex', 
                  'capital-gain', 'capital-loss', 'hours-per-week', 'native-country', 'flg-50K']
    
  • 직업, 학력, 혼인 경력, 인종 등 속성 정보에 따라 연간 소득이 50만 달러를 넘을지 예측하는 데이터 세트.
  • 이것은 미국 1994년 인구센서스 데이터베이스에서 추출한 것으로 상세한 내용은 다음과 같다.https://archive.ics.uci.edu/ml/datasets/adult
  • 개요는 다음과 같다.설명 변수는 숫자 유형과 속성 유형 모두 14개입니다.목적 변수는 연수입'50만 달러 초과 여부'가 있는데 표본 수는 32561명이다.
  • 변수 이름
    의역
    프로젝트(해설)
    데이터 형식
    0
    age
    나이, 연령
    연속값
    int
    1
    workclass
    직업 계급
    셀프-emp-not-inc(개인사업주), 셀프-emp-ic(개인경영법인), State-gov(주정부) 등
    varchar(가변 길이 문자열)
    2
    fnlwgt
    최종 무게
    연속값(응답한 단원으로 표시된 목표의 전체 단원수)
    int
    3
    education
    학력.
    Bacheelors(학사), HS-grad(고졸), Proof-school(전문직계대학원) 등
    varchar
    4
    education-num
    취학 연한
    연속값
    int
    5
    marital-status
    결혼 경력
    Married-civ-spouse(결혼한 배우자), 디보어ced(이혼), 네버-married(미혼) 등
    varchar
    6
    occupation
    직업.
    Sales(영업직), Exec-managerial(경영간부), Adm-Colical(사무직) 등
    varchar
    7
    relationship
    동거
    Wife(아내), Own-child(친생), Husband(남편) 등
    varchar
    8
    race
    인종
    화이트(백인), 아시아(Asian-Pac-Islander·아시아계), 블랙(흑인) 등
    varchar
    9
    sex
    성별 명사
    Female(여성), Male(남성).
    varchar
    10
    capital-gain
    고정자산 매각 수익
    연속값
    int
    11
    capital-loss
    고정자산 매각손실
    연속값
    int
    12
    hours-per-week
    주간 근무 시간
    연속값
    int
    13
    native-country
    국적.
    United-sates(미국), 재팬(일본), 큐바(쿠바) 등
    varchar
    target
    flg-50K
    연간 50K달러 이상 매출
    50K, <=50K.
    varchar
    # データの形式と欠損数を出力
    print(df.shape)
    print('欠損の数:{}'.format(df.isnull().sum().sum()))
    
    # データの先頭5行を出力
    df.head()
    

    (변환 의도 변수)

    # 目的変数の各項目の個数を確認
    df.groupby('flg-50K').size()
    
  • 연간 소득이 50만 달러 이상인 7천841명이 전체의 24%를 차지했다.
  • 그나저나 50만 달러의 엔화는 53066275.00엔(2020년 7월 24일 22:30 UTC)이다. 연간 5000만 엔을 넘는 고소득자가 4분의 1에 육박하는 것이다.
  • 목표 변수의 데이터 값은'<=50K'와'>50K'로 처리가 어렵기 때문에 가상 변수(상응하는 =1, 부합하지 않음=0)로 전환한다.
  • # カラムを追加し、1または0のフラグを設定
    df['fin-flg'] = df['flg-50K'].map(lambda x: 1 if x ==' >50K' else 0)
    print(df)
    
    # 各項目の個数を再確認
    df.groupby('fin-flg').size()
    

    4 모델 구축

    # ロジスティック回帰のモデル構築のためのインポート
    from sklearn.linear_model import LogisticRegression
    
    # データ分割(訓練データとテストデータ)のためのインポート
    from sklearn.model_selection import train_test_split
    
  • 를 설명 변수로 하고 수치 유형의age,fnlwgt,education-num,capital-gain,capital-loss 5개 변수를 사용한다.
  • 목표 변수는 표시된fin-flg이다.
  • # 説明変数と目的変数の設定
    x = df[['age', 'fnlwgt', 'education-num', 'capital-gain', 'capital-loss']]
    y = df['fin-flg']
    
  • 는 설명 변수(X)와 목적 변수(Y)를 훈련 데이터(train)와 테스트 데이터(test)로 나눈다.
  • 훈련 데이터를 사용하는 학습에서 모델을 생성하고 테스트 데이터를 사용하여 모델을 평가한다.
  • # 訓練データとテストデータに分割
    X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.5, random_state=0)
    
  • 매개 변수random_state=0의 고정 랜덤수 생성(이 경우 0으로 설정)은 몇 번을 실행하든지 같은 방식으로 분류된다.어떤 줄을 제어할 때 매번 실행할 때 훈련용이나 테스트용으로 분류되어 결과를 고정시키고 모델을 재현하게 한다.
  • 여기test_size를 0.5로 훈련용과 테스트용으로 나눈다.
  • # LogisticRegressionクラスの初期化
    model = LogisticRegression()
    
    # 学習の実行
    model.fit(X_train, Y_train)
    

    등모형 평가

    # 訓練データの正解率
    train_score = format(model.score(X_train, Y_train))
    print('正解率(train):', train_score)
    
    # テストデータの正解率
    test_score = format(model.score(X_test, Y_test))
    print('正解率(test):', test_score)
    
  • 훈련 데이터와 테스트 데이터 모두 약 80%의 정확도로 학습이 발생한 적이 없다고 판단할 수 있다.
  • # 学習済みモデルの各変数の係数を取得
    regression_coefficient = model.coef_
    
    # 行ラベル・列ラベルを付与してDataFrameに変換
    pd.DataFrame(regression_coefficient.T,
                 index = [x.columns.values],
                 columns = ['回帰係数'])
    
  • 변수 중의 모든 변수가 목표 변수에 대한 영향도를 나타내는 계수가 モデル名.coef_에서 얻어진 것을 설명한다.
  • 고정자산의 매각손익(capital-gain,capital-loss)이 연수입에 영향을 미치는 것은 간단하고 알기 쉬운 결과이다.
  • 다음에 오즈비를 계산해 봅시다.
  • # 学習済みモデルの各変数のオッズ比を取得
    odds_ratio = np.exp(model.coef_)
    
    # 行ラベル・列ラベルを付与してDataFrameに変換
    pd.DataFrame(np.exp(model.coef_).T,
                 index = [x.columns.values],
                 columns = ['オッズ比'])
    
  • OZ비는 각 계수가 1일 증가할 때 예측 확률에 얼마나 큰 영향을 미치는지를 나타낸다.영향이 없을 때는 1.0이다.
  • 또한 교차 엔트로피 오차와 OZ비에 관해서는 좀 더 자세히 보고 싶습니다.

    좋은 웹페이지 즐겨찾기