본문 바로가기
개인 공부/Machine Learning

[머신러닝] 1. 머신러닝 프로세스

by 아메리카노와떡볶이 2022. 10. 20.
728x90
1. 머신러닝 프로세스

머신러닝을 위해서는 데이터가 중요하고..  모델이 어떤 종류가 있으며.. 시각화는 어떤 방법으로 수행하고 등

머신러닝 전 과정에서 특정 한 부분만 공부하더라도 매우 그 범위가 넓고 깊이가..  깊습니다. 

 

따라서 이번 글에서는 머신러닝으로 어떤 문제를 해결하고자 할때의 전반적인 프로세스 과정을 살펴보고

다음 글에서 해당 프로세스를 통해 실제 문제를 해결하는 미니 프로젝트를 수행할까 합니다.

 

*참고문헌

해당 머신러닝 프로세스 개념은 "인공지능 보안을 배우다,서준석" 에서 제시한 개념입니다.

1.https://bkshin.tistory.com/

2.Reference1: Medium (Ensemble Learning - Bagging and Boosting)

3. Reference2: Bagging과 Boosting 그리고 Stacking

 

 

머신러닝 프로세스란?


어떤 문제를 해결하기 위해 머신러닝을 적용한다고 할때, 일련의 과정을 머신러닝 프로세스라고 합니다.

 

머신러닝 프로세스는 크게 네 단계로

데이터 수집 -> 특징 공학 -> 모델링 -> 최종모델링 의 단계로 생각할 수 있습니다.

 

각 단계 별 활동에 대해 알아보며 머신러닝 프로세스에 대해 알아보겠습니다.

 

 

데이터 수집


먼저 첫번째 단계인 데이터 수집에 대해서 알아보겠습니다.

데이터는 사실상 머신러닝의 주인공이라 생각할 수 있습니다. 

 

이때 데이터 수집 단계에서 주의해야할 것은 해결하려는 도메인(문제 영역)을 확실하게 파악하고,

문제를 해결하려는 목적에 맞게 데이터를 수집하는 것입니다.

 

데이터 수집은 여러 채널을 통한 방법이 존재하지만, 크롤링이나 어떤 시스템의 로그 정보 수집 등의 방법을 많이 사용합니다.

 

그렇다면 수집해야할 데이터의 양은? 아이러니하게도 충분한 데이터의 양은 모델을 직접 만들어보아야 알 수 있습니다.

데이터의 속성과 모델링 목표에 따라 필요한 데이터의 양이 달라지기 때문입니다.

따라서 어느정도가 충분한지 미리 규정하는 것은 큰 의미가 없으며, 가능한 많은 데이터를 확보하는 것이 우선되어야합니다.

 

 

특징공학


데이터가 가장 중요한 이유는, 데이터가 가지는 특징(feature) 때문입니다.

이 feature은 모델의 성능을 좌우하는 핵심 요소로 머신러닝 프로세스에서 가장 중요한 역할을 담당합니다.

 

 

특징공학 단계에서는 데이터의 의미를 이해하고, 조작하는 과정과

feature를 추출하고, 변환하는 모든 과정을 포함합니다.

 

 

특징공학 프로세스

 

특징공학 프로세스는 다음과 같습니다.

 

특징공학 프로세스를 단계 별로 상세하게 알아보자

 

관찰과 전처리 단계

데이터 관찰단계에서는 문제 해결에 도움이 되는 정보를 찾기 위함이 아니라 데이터 자체를 이해하기 위함이라는 사실을 기억해야 합니다.

 

이 단계에서는 데이터의 형식이 어떤지, 누락된 값이 있는지, 가독성을 위한 데이터 파싱, 테이블 명 지정, db 또는 파일에 저장하는 과정이 포함됩니다.

 

이때 데이터 관찰과 전처리 과정은 시각화와 함께 진행해야합니다.

 

데이터 시각화는 특징 공학 과정 전반에 필요한 핵심 기술로 분석가는 다양한 시각화 결과물을 토대로 숨겨진 특성을 파악하고 이를 토대로 의사결정을 할 수 있게 되는 것입니다.

 

특징 추출 단계

다음은 특징을 추출하는 단계입니다. 데이터에서 어떤 특징을 추출할지 결정하는 방법인데 크게 세가지가 있습니다.

여기서 주의해야할 것은 데이터 특징은 가능한 모든 특징을 뽑아 두는게 좋습니다.

반드시 위의 세가지 방법 중 하나를 선택해야 하는 것이 아닙니다.

 

단 모델링 결과가 기대에 미치지 않을 경우, 데이터 특징을 새로 추출하는 불상사가 발생하지 않게 가능한 모든 특징을 추출해야합니다

 

특징 선택 단계

다음은 추출한 특징 중 어떤 특징을 모델링에 활용할지 선택하는 것입니다.

 

모든 특징을 판단에 활용하면 좋을까? 아닙니다. 그 이유는 하나의 특징은 하나의 차원으로 이해할 수 있기때문!

때문에 특징이 불필요하게 많아지면,

모델학습에 필요한 데이터가 기하급수적으로 늘어나거나 모델 성능이 떨어질 수 있습니다.

 

특징선택은 크게 두가지 방법이 있습니다.

먼저 대표적인 알고리즘을 선정해서 각 특징 조합에 대한 모든 경우를 테스트 하는 방법입니다.

예를 들면 다음과 같은 방식입니다.

 

위의 경우 특징 조합1,2,3 을 대상으로 다양한 분류모델을 가지고 각 성능을 테스트하고 , 특징 조합별 평균을 계산합니다.

그 후 가장 평균값이 높은 특징 조합을 선택하는 방법입니다.

 

다음은 휴리스틱에 의존한 특징 선택방법입니다.

 

휴리스틱은 경험에 기반한 문제해결법으로, 도메인에 대한 지식 경험을 기반으로 특징을 선택하는 것입니다.

예를 들어 악성코드 탐지 모델링을 위해 데이터의 특징을 선택할 때 해당 분야 전문가의 경험에 기반해서 중요한 특징을 선택하는 것입니다.

 

특징 변환단계

변환단계는 이름 그대로 특징 값을 모델링에 적합한 형태로 변환하는 과정입니다.

 

대표적으로 정규화, 스케일링 , 범주형 데이터 처리가 있습니다.

 

정규화는 모든 특징의 값 범위를 동일한 범위로 맞춰주는 과정입니다.

스케일링은 특정 데이터를 정규 분포 형태로 변환해주는 과정입니다.

가장 일반적인 방식은 로그변환이다. 이를 통해 정규화와 왜도(비대칭도),첨도를 낮출 수 있다.

 

범주형 데이터 처리는 문자열 데이터 등 수치가 아닌 데이터에 대해서 수치형으로 변환 시키는 작업입니다.

이러한 변환이 필요한 이유는 대부분 머신러닝 모델은 N차원 평면에 데이터를 펼쳐놓고, 최적의 함수를 찾고자 하기 때문입니다. 가장 대표적인 범주형 데이터 처리 방법은 one-hot 인코딩 법으로

 

예를 들어

특징

A,B,C,D,E 가 있을 때

A (1, 0 , 0 , 0 ,0 ), B (0, 1 , 0 , 0 ,0 ) , , , E( 0, 0 , 0 , 0 , 1) 으로 매핑 하는 것입니다.

모델링


특징 공학 단계에서 데이터 수집 → 추출 → 선택 → 변환을 거쳐 모델 학습에 필요한 데이터를 가공했습니다.

여기서 모델은 데이터와 목표 값 사이의 관계를 이해하는 과정을 정의한 방법론이라고 이해할 수 있습니다.

모델링이란 이 방법론을 통해서 데이터를 아주 잘 설명할 수 있는 하나의 함수(선)을 찾는 것입니다.

 

이제 이 데이터를 분석해서 최적의 모델을 찾는 모델링 단계를 수행해볼 것입니다

 

모델링은 크게 모델 구축, 평가, 최적화 단계로 구분됩니다.

 

모델 구축 단계

먼저 모델 구축단계이다.

모델은 뉴럴 네트워크를 제외하고 대부분 고정된 학습 방식을 가진다. 즉 다시 말하면 모델의 알고리즘을 건드릴 수 없다는것이다. 때문에 모델을 구축하고 성능을 개선하기 위한 방법은

데이터 양과 품질을 확보하거나, 모델 알고리즘 옵션을 변경하거나 정도로 생각할 수 있다.

대표적인 모델 성능 개선 방법인 배깅과 부스팅에 대해서 알아보자.

 

배깅(Bagging)

배깅은 데이터와 모델을 나누어서 학습한 뒤 전체 결과를 집계해서 최종 판단을 하는 방법입니다.

swallow.github.io

그림을 보면 데이터를 샘플링할때 bootstrap 이라는 단어가 보이는데, 이것은 데이터 추출시 중복을 허용하여+ 랜덤으로 추출했다는 것입니다. 이렇게 데이터를 bootstrap 하는 이유는 각 모델학습에 쓰이는 데이터를 bootstrap 해서 추출함으로써 학습된 각 모델은 각기 다른 특성을 가지게 됩니다.

즉 각 데이터 bootstrap을 통해 각 모델간의 독립성이 생깁니다. ( = 각 모델간의 상관성이 제거됩니다)

 

그리고 학습된 모델의 결과를 집계하여 최종 판단을 수행합니다.

이때 Categorical Data는 투표 방식(Votinig)으로 결과를 집계하며, Continuous Data는 평균으로 집계합니다.

배깅은 간단하면서도 파워풀한 방법입니다. 배깅 기법을 활용한 모델이 바로 랜덤포레스트입니다.

 

부스팅(Boosting)

부스팅은 가중치를 활용하여 약 분류기를 강 분류기로 만드는 방법입니다. 배깅은 Deicison Tree1과 Decision Tree2가 서로 독립적으로 결과를 예측합니다. 여러 개의 독립적인 결정 트리가 각각 값을 예측한 뒤, 그 결과 값을 집계해 최종 결과 값을 예측하는 방식입니다.

하지만 부스팅은 모델 간 팀워크가 이루어집니다. 처음 모델이 예측을 하면 그 예측 결과에 따라 데이터에 가중치가 부여되고, 부여된 가중치가 다음 모델에 영향을 줍니다. 잘못 분류된 데이터에 집중하여 새로운 분류 규칙을 만드는 단계를 반복합니다. 아래 그림을 통해 설명해보겠습니다.

Medium (Boosting and Bagging explained with examples)

 

 

배깅과 부스팅 차이

swallow.github.io

위 그림에서 나타내는 바와 같이 배깅은 병렬로 학습하는 반면, 부스팅은 순차적으로 학습합니다. 한번 학습이 끝난 후 결과에 따라 가중치를 부여합니다. 그렇게 부여된 가중치가 다음 모델의 결과 예측에 영향을 줍니다.

오답에 대해서는 높은 가중치를 부여하고, 정답에 대해서는 낮은 가중치를 부여합니다. 따라서 오답을 정답으로 맞추기 위해 오답에 더 집중할 수 있게 되는 것입니다.

부스팅은 배깅에 비해 error가 적습니다. 즉, 성능이 좋습니다. 하지만 속도가 느리고 오버 피팅이 될 가능성이 있습니다.

그렇다면 실제 사용할 때는 배깅과 부스팅 중 어떤 것을 선택해야 할까요? 상황에 따라 다르다고 할 수 있습니다. 개별 결정 트리의 낮은 성능이 문제라면 부스팅이 적합하고, 오버 피팅이 문제라면 배깅이 적합합니다.

 

모델 평가단계

모델 평가 단계에서는 대표적으로 K-Fold 교차 검증기법을 사용한다.

예를 들어 K= 10 이고, 100개의 데이터가 있다고 하자.

이때 100개의 데이터를 10 묶음의 데이터셋으로 만들고, 각 데이터셋을 가지고 모델을 평가한다.

이때 10번 수행의 평균 정확도를 계산하는 방법이다.

 

회귀, 분류, 군집 모델 별 성능평가

회귀: 실제 데이터와 예측 값의 차이를 계산한다. 차이가 낮을수록 정확도가 높은 것

분류: 정/오답을 맞춘 개수

군집: 데이터가 얼마나 잘 군집되었는지? ( 군집은 비지도학습으로, 학습을 위해서는 정답이 필요없지만 평가시에는 정답이 필요하다)

정보보안에는 분류모델이 가장 많이 활용되므로, 분류모델을 평가하는 혼돈 행렬기법에 대해 알아보자.

 

혼돈 행렬(Confusion Matrix)

혼돈 행렬은 분류알고리즘을 평가하기 위해 기본이 되는 분류 표로

Actual은 실제 정답, Predict는 모델의 예측값을 의미한다.

 

 

예를 들어 악성코드와 정상프로그램을 분류하고자 하는 classifier 을 생각해보자.

해당 분류기 입장에서 악성코드는 positive 고, 정상프로그램은 negative 다.

 

True Positive : 실제 악성코드를 분류기가 악성코드라고 예측한 것

True Negative : 실제 정상프로그램을 정상프로그램이라고 에측한 것

False Positive : 실제 악성코드를 정상프로그램이라고 예측한것( 오탐 )

False Negative : 실제 정상프로그램을 악성프로그램이라고 예측한것( 과탐 )

 

정확도, 정밀도 , 재현율

정확도 : 모델이 예측한 횟수 중에서 True에 대한 비율

⇒ $( TN + TP ) / (TP + FN + FP + TN)$

정밀도: 모델이 Positive라고 예상한 거 중에 실제로 맞춘 개수

재현율 : 실제 Positive 중에 모델이 Positive라고 맞춘 개수

actual - 실제 가짜계정 데이터

predict - 모델이 가짜계정이라고 예상한 데이터

가계정 분류기 모델에서 → 서비스

재현율 - TP / TP+ FN

정상계정이라고 모델이 예측을 했는데, 실제로는 가짜계정

(오탐)

정밀도 - TP / TP+ FP

악성계정이라고 모델이 예측을 했는데, 실제로는 정상계정

(과탐)

 

Q. 악성코드 분류 모델에서 재현율은 무엇을 의미하나요?

재현율은 오탐과 관련된 정보입니다.

재현율은 실제값이 Positive인 대상중에 예측값과 실제값이 Positive로 일치한 데이터의 비율을 뜻한다. 민감도(Sensitivity) 또는 TPR(True Positive Rate)라고도 불린다.

실제 악성코드 중에 예측 성공 비율

실제 악성코드(positive) 데이터를 대상으로 분류모델은 두 가지 판단을 내릴 수 있습니다.

이 데이터는 악성코드 일 것이다. ( 정탐 , True Positive)

이 데이터는 정상프로그램일 것이다.(False Negative)

이때 TP에 해당하는 정탐의 비율을 재현율이라고 부릅니다.

다시 말해 재현율은 실제 positive 데이터를 기준으로 얼마나 맞췄는지를 나타냅니다.

TP/TP+FN

Q. 악성코드 분류 모델에서 정밀도는 무엇을 의미하나요?

모델이 악성코드(positive) 라고 예상한 데이터를 기준으로 실제 데이터가 악성코드(positive)인 경우를 말합니다.

정밀도는 예측을 Positive로 한 대상중에 예측값과 실제값이 Positive로 일치한 데이터의 비율을 뜻한다. Positive 예측 성능을 더욱 정밀하게 측정하기 위한 평가 지표로 양성 예측도라고도 불린다.

악성코드라 Predict 예측한 거 중에 예측 성공 비율

TP/TP+FP

728x90

'개인 공부 > Machine Learning' 카테고리의 다른 글

[머신 러닝] 0. 인공지능과 보안?  (1) 2022.10.15

댓글