본문 바로가기

+ α/▶개인 복습

0501 실습 (Telco- baseline)

728x90

📌 개념 및 코드 복습

 

index_col 

📝데이터 로드할 때, 원하는 열로 인덱스 지정하여 불러오기

 

to_numeric

📝 데이터 형태를 숫자형태로 변경 

pd.to_numeric(df["TotalCharges"],errors='coerce')

📝errors 

errors : {'ignore', 'raise', 'coerce'}, default 'raise'
    - If 'raise', then invalid parsing will raise an exception.
    - If 'coerce', then invalid parsing will be set as NaN.
    - If 'ignore', then invalid parsing will return the input.

"raise" : 에러 발생

"coerce" : 결측치로 대체

"ignore" : 입력 값 반환 

 

select_dtypes

📝 데이터타입중 원하는(해당되는) 데이터 타입만 출력

 

value_counts()

📝 해당 컬럼의 빈도수 구하기

     => normalize=True == 1

 

사이킷런에서 주목받는 알고리즘 (라이브러리)
부스팅계열 알고리즘( 정형 데이터 )  신경망 알고리즘 ( 비정형 데이터 )
XGBoost, LightGBM, CatBoost TensorFlow, Keras, PyTorch

    

알고리즘 종류 ( 분류 / 회귀 ) 
회귀 분류 
릿지, 라쏘, 엘라스틱넷 로지스틱 회귀
분류 / 회귀 에 사용하는 알고리즘 상이함

📌 Classification And Regression Tree, CART ( 분류 및 회귀 트리 )
=> 분류와 회귀에 모두 사용

 


📌 Decision Tree (결정나무 학습법)

" 어떤 항목에 대한 관측값과 목표값을 연결시켜주는 예측 모델" 

✅ 결정나무 학습법이란
통계학과 데이터 마이닝, 기계 학습에서 사용하는 예측 모델링 방법 중 하나

 

분류 트리  회귀 트리
목표 변수가 범주형 목표 변수가 연속(실수)형 

 

✅ 결정나무 학습법의 특징 


📝 의사 결정 분석에서 결정 트리는 시각적이고 명시적인 방법 => 의사 결정 과정과 결정된 의사 시각화
📝 결과를 해석하고 이해하기 쉬움 . 간략한 설명만으로도 이해 가능
📝 자료를 가공할 필요가 거의 X
     => 다른 기법들의 경우 자료를 정규화 or 임의의 변수를 생성 or 값이 없는 변수를 제거
📝 수치데이터와 범주데이터 모두 적용
📝 다른 기법들은 일반적으로 오직 한 종류의 변수를 갖는 데이터 셋을 분석하는 것에 특화
     => ex) 신경망 학습은 숫자로 표현된 변수만을 다룸
                관계식(relation rules)은 오직 명목 변수만을 다룸
📝 화이트박스 모델을 사용
     => 모델에서 주어진 상황이 관측 가능하다면 Boolean 논리를 이용하여 조건에 대해 쉽게 설명
         (결과에 대한 설명을 이해하기 어렵기 때문에 인공신경망은 대표적인 블랙 박스 모델 )
📝안정적 . 해당 모델 추리의 기반이 되는 명제가 다소 손상되었더라도 잘 동작
📝대규모의 데이터 셋에서도 잘 동작
     => 방대한 분량의 데이터를 일반적인 컴퓨터 환경에서 합리적인 시간 안에 분석.

 

 

✅ 결정나무 학습법의 구조 

출처 : 🌲결정트리(Decision Tree) (velog.io)

📝 Root node(루트 노드) : 최상단 노드

📝 Rule Node(규칙 노드) : 레이블 분류하기 위한 노드. 가능한 적은 리프 노드로 높은 예측정확도 가지려면 

                                           최대한 많은 데이터셋이 해당 분류에 속하기 규칙 정해져야 함

📝 Leaf node(리프 노드) : 말단 노드 . 여기에 결정된 분류 값 존재

📝 Branch / Sub tree : 새로운 규칙 조건마다 규칙 노드 기반의 서브트리 생성

 

✅ 주요 파라미터

 

criterion ( gini , entropy ) 가지 분할의 품질 측정
max_depth 트리 최대 깊이
min_samples_split 내부 노드 분할 시 필요한 최소 샘플 수
min_samples_leaf 리프 노드에 있어야 하는 최소 샘플 수
max_leaf_nodes 리프 노드 수 의 제한치
random_state 추정기의 무작위성 제어. 실행했을 때 같은 결과 나오도록 함

 

✅ 주요 파라미터 - 하이퍼 파라미터


min_samples_split : 내부 노드 분할 시 필요한 최소 샘플 수 . 과적합 제어에 사용 
                                작게 설정할수록 분할되는 노드 많아져 과적합 가능성 증가
min_samples_leaf : 말단 노드 되기위한 최소한의 샘플 수. 과적합 제어 용도
                                비대칭적 데이터인 경우 특정 클래스의 데이터 극도로 작을 수 있어 이럴때는 작게 설정
max_features : 최적의 분할 위해 고려할 최대 feature 개수 
                         int로 지정 시 대상 feature 개수, float로 지정 시 전체 feature중 대상 feature 퍼센트
                         log로 지정 시 전체 feature를 log2()로 설정
max_depth :  트리 최대 깊이 지정. 노드가 가지는 데이터 개수가 min_samples_split 보다 작아질 때까지 계속 분할
                         깊이 깊어지면 min_samples_split 설정대로 최대로 분할하여 과적합할 수 있으므로 적당한 값 제어

 

✅ 모델 성능 개선 방법

 

📝 데이터 분할
📝 데이터 전처리, 결측치 처리
📝 피처 선택, Feature Engineering (스케일링, 변환, 인코딩 등)
📝 Model  `파라미터 값'을 변경

 

✅ 학습 모델의 점수 측정 방법 3가지 ( Accuracy )

 

1번 방법

(y_test == y_predict).mean()

=> 예측한 값과 실제 정답이 맞는지 확인

=> 예측 정답인 값은 True로 나오게 됨 . True = 1이기 때문에 평균값 내면 정답 비율 구할 수 있음

 

2번 방법

from sklearn.metrics import accuracy_score

accuracy_score(y_test, y_predict)

3번 방법

model.score(X_test, y_test)

=> 정답 알고 있을 때만 사용가능

 

 

✅ 결정나무 시각화 ( Plot Tree )

from sklearn.tree import plot_tree

plt.figure(figsize=(20, 10))
plot_tree(model, filled=True, max_depth=5, fontsize=12, 
          feature_names=feature_names);

 

✅ 결정나무 시각화 ( Text )

from sklearn.tree import export_text

print(export_text(model, max_depth = 3, feature_names = feature_names.to_list()))

 

✅ 피처 중요도

# feature_importances_ 를 통해 모델의 피처 중요도를 추출
model.feature_importances_
728x90