ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 빅데이터 분석기사 작업형 3유형 공부 방법
    python 2024. 12. 31. 15:08

    안녕하세요!

     

    저번 포스팅에 빅데이터 분석기사 전체적인 시험 공부 방법에 대해 포스팅 해보았는데,

    작업형 3유형이 제가 공부할 때 가장 정보도 없고 막막했어서 조금이라도 도움이 되길 바라며 요로콤 글을 올려봅니다 ;) 

     


     

    작업형 3유형에서는 통계 문제가 시험 문제로 나오는데, 

    그중에서도 '다중회귀분석''로지스틱 회귀분석' 이 2개가 주로 시험 문제로 많이 나온 것 같았어요! (추세가 그런듯,,)

     

    3유형은 크게 2문제가 나오는데, 

    각 큰 2문제 내에 3개의 소문제가 나와요!

     

    1. 다중회귀분석 시험 질문

    1-1. 

    1-2. 

    1-3. 

     

    요론 느낌~ 

     

    근데, 3문제가 각각 독립적으로 있을수도 있는데 1-2에서 나온 결과를 바탕으로 1-3을 풀어야 하는 내용도 있었기 때문에 (9회차에서는 그랬습니당)

    공부할 때 나올 수 있는 문제는 다 파악하는게 중요할 것 같아요! 

     


     

    지금부터 다중회귀분석, 로지스틱 회귀분석에서 나올 수 있는 시험 문제 관련해서 내용 작성해볼게요! 

     

    1. 다중회귀분석 

    크게 3개 문제가 나올 수 있을 것 같아요! 

    1. 회귀계수 값, 유의확률 값 
    2. 결정계수, 조정된 결정계수
    3. predict() 함수 통해 새로운 데이터를 이용해 종속 변수 예측값 계산

     

     

    먼저 필요한 라이브러리 및 데이터를 불러오고, 

    # 라이브러리 임포트
    from statsmodels.formula.api import ols
    
    # 데이터 불러오기
    import statsmodels.api as sm
    trees = sm.datasets.get_rdataset('trees').data

     

    데이터에 결측값이 있는지, 어떤 구조로 되어있는지 파악을 하는 과정은 꼭 거치는게 좋아요

    # 데이터 기본 정보 확인 
    trees.info()
    trees.isnull().sum()

     

    데이터를 가지고 종속변수, 독립변수를 파악하고 다중회귀분석을 위한 식을 작성합니다.

    식을 만들때는 .fit() 함수를 사용해서!!! 

    결과 확인은 .summary() 함수를 사용해서!!!

    저는 이게 너무 편하고 눈에도 잘 보여서 statsmodels.formula.api 활용해서 진행했습니다. 

    # 모델 생성
    # 모댈은 '종속 ~ 독립', data = dataset . fit()
    model = ols('Volume ~ Girth + Height', data = trees).fit()
    
    # 결과 확인
    print(model.summary())
    # 이거 바탕이면 식은 
    # volume = 4.7082 * Girth + 0.3393 * Height -57.9877

     

    .summary() 함수 사용하면 나오는 결과

     

     

    1. 회귀계수 값, 유의확률 값 확인

     

    회귀계수 확인 

    '.parmas' 사용 

    # 회귀계수
    model.params

     

    유의확률 확인 

    '.pvales' 사용 

    # 유의확률 
    model.pvalues

     

    이건 기본적으로 알아야 하는 거고, 

    이걸 알아야 시험 문제에 적용 및 활용할 수 있어요

     

    예를 들어, 

    '다중회귀분석을 수행하여 Girth의 회귀계수에 대한 p-value 구하고 소숫점 셋째자리까지만 작성하시오'라는 문제가 나온다면, 

    print(round(model.pvalues['Girth'], 3))

     

    이렇게 활용하시면 됩니다! 


    2. 결정계수, 조정된 결정계수

     

    결정계수 확인 

    '.rsquared' 사용 

    # r-square 값 
    model.rsquared

     

    조정된 결정계수 확인 

    '.rsquared_adj' 사용 

    # 조정된 r-square 값 
    model.rsquared_adj

     

     

    3. predict() 함수 통해 새로운 데이터를 이용해 종속 변수 예측값 계산

     

    새로운 데이터 추가 시(지름, 키) -> 부피값(종속변수 값) 예측

     

    이전에 있던 데이터를 가지고 다중회귀모델(식)을 만들었는데, 

    이 식을 바탕으로 새로운 값들을 넣으면 종속변수인 부피값이 어떻게 될지 예측하는겁니다! 

    # 새로운 데이터 추가 
    new_data = pd.DataFrame({'Girth': [8.5, 13.0, 19.0], 
                             'Height': [72, 86, 85]})
                             
    # 예측값 확인 
    pred = model.predict(new_data)
    print(pred)
    
    # 0     6.457794
    # 1    32.394034
    # 2    60.303746

     

    결과를 보면 'Girth'값이 8.5이고, 'Height'값이 72이면 

    부피값은 6.457794 정도를 예상한다고 하네용 

     

    추가적으로,,, 

    9회차 시험에서는 소문제로 상관관계에 관해서도 물어봤던 것 같아요...! 

    상관관계는 .corr() 함수 사용해서 풀었던 것 같습니다

     


     

    2. 로지스틱 회귀분석 

    일단 문제는 여기꺼 사용해서 풀었어욥! 

    https://www.kaggle.com/code/agileteam/t3-logit-py

     

    t3-logit-py

    Explore and run machine learning code with Kaggle Notebooks | Using data from Big Data Certification KR

    www.kaggle.com

     

    로지스틱 회귀분석에서 크게 나올 수 있는 문제는

    1. 오즈비 값: np.exp(model.params)
    2. 로그 우도: model.llf
    3. 유의확률: model.pvales
    4. 잔차이탈도: -2 * model.llf 

     

    이정두...? 인 것 같습니다. 

    먼저 라이브러리 임포트 해주고

    from statsmodels.formula.api import logit
    
    # 데이터셋 분할 
    train = df.iloc[:350] #  0부터 349까지의 행 가져옴. 총 350개의 데이터 
    test = df.iloc[350:]

     

    1. 오즈비 계산 

    income 변수를 독립변수로 purchase를 종속변수로 사용하여 로지스틱 회귀 모형을 만들고, 
    income 변수가 한 단위 증가할 때 구매할 오즈비 값을 계산

    # 식: 종속변수 ~ 독립변수
    model = logit('purchase ~ income', data = train).fit()
    print(model.summary())
    
    # 오즈비 계산 
    odds_ratio_income = np.exp(model.params['income'])

     

    이 오즈비 가지고는 아래 문제처럼 활용될 수 있는데요, 

    income 변수가 5 증가할 때 오즈비 증가 배수 계산 

    print('income 변수가 5 증가하면 오즈비는', round(np.exp(5 * model.params['income']), 3), '배 증가합니다')

     

     

    2. 로그 우도 계산 

    독립변수 income만 사용해 학습한 모델의 로그 우도 계산

    log_likelihood_income = model.llf

     

     

    3. 유의확률 계산 

    독립변수 income만 사용해 학습한 모델의 유의확률(p-value) 계산

    p_value_income = model.pvalues['income']

     

    유의확률 가지고는 아래 문제가 나올 수 있어요. 

    유의확률을 구하고, 최대 유의확률 값을 출력하시오 
    (최대 유의확률을 구하라는 것은 이 세 p-value 중 가장 큰 값을 찾으라는 의미)

    import numpy as np
    max_pvalue = np.max(model.pvalues)

     

    아니면 

    유의하지 않은 변수 개수를 세라고 할 수도 있어요. 

    # 유의하지 않은 변수 (p-value > 0.05)
    p_values = model.pvalues
    insignificant_vars = p_values[p_values > 0.05]
    print(f'유의하지 않은 변수 개수: {len(insignificant_vars)}개')

     

     

    4. 잔차이탈도 계산 

    print(round(-2 * model.llf, 2))

     


     

    요약해보자면, 

    저는 작업형 3유형 공부할 때

    1. 저렇게 시험문제 유형이 뭐가 나오는지 먼저 다 파악하고

    2. 각 문제에 필요한 함수가 뭔지 파악

    3. 이 함수 활용해서 어떻게 문제가 나올지 추가적으로 생각 

     

    이런식으로 하고 작업형 3유형 만점을 받았습니다-! 

     

    조금이라도 도움이 되셨으면 좋겠습니다,,,ㅎㅎㅎ 

    긴 글 읽어주셔서 감사해뇨

Designed by Tistory.