David의 개발 이야기!

머신러닝 프로젝트를 기획하고, 설계해보자! 본문

핸즈온 머신러닝

머신러닝 프로젝트를 기획하고, 설계해보자!

david.kim2028 2022. 9. 24. 15:01
반응형

머신러닝 프로젝트의 업무프로세스는 다음과 같다

( 부동산 회사 데이터 사이언티스트라고 가정하고 알아가보자! ) 

 

1. 큰 그림을 본다

2. 데이터를 구한다

3. 데이터로부타 통찰을 얻기 위해 탐색하고 시각화 한다

4. 머신러닝 알고리즘을 위해 데이터를 준비한다

5. 모델을 선택하고 훈련시킨다

6. 모델을 상세하게 조정한다

7. 솔루션을 제시한다

8. 시스템을 런칭하고 모니터링하고 유지 보수 한다

 

 

1. 큰 그림 보기 

 

 

위 데이터 모델을 학습시켜서, 다른 측정 데이터가 주어졌을 때 구역의 중간 주택 가격을 예측하고자 한다! 

 

1.1 큰 그림을 보기 위한 질문들

 

A. 비지니스의 목적이 정확히 무엇인가요? (문제정의)

- 모델을 만들기가 최종 목적이 아님

- 모델을 사용해 이익을 얻을 수 있어야함

 

B. 현재 솔루션은 어떻게 구성되어 있나요? 

- 어떠한 데이터를 사용할 수 있는지 파악 ( 데이터 pipeline )

- AS-IS, TO-BE 분석

- 머신러닝 프로젝트가 현재 솔루션을 개선할 수 있을지 판단

 

C. 어떠한 머신러닝 기법을 사용해야할까? 

- 지도학습, 비지도학습, 강화학습

- 분류, 회귀

- 배치학습, 온라인 학습 

 

-> 여기서는, 레이블된 훈련 샘플이 있으므로, 지도학습이 적합하다! 

-> 주택가격을 예측하기 위해 회귀이고, 여러 특성을 통해 하나의 값을 예측하므로 다중회귀 문제이다.

-> 연속적인 흐름이 없기 때문에 일반적 배치학습이면 충분하다 !

 

1.2 성능지표 선택 

 

(1) RMSE : Root Mean Square Error : 평균 제곱근 오차 & l2 norm

 

(2) MAE : Mean Absolute Error : 평균 절대 오차 & l1 norm

 

2. 데이터 구하기

 

2.1 작업환경 만들기 

- 파이썬 패키지 : 주피터, 넘파이, 판다스, 맷플롯립, 사이킷런 등

- 구글 코랩 ->  구글 코랩 장점 : 1. Pre-installed Libraries 2. Saved on the Cloud 3. Collaboration 4. Free GPU, TPU Use

 

2.2 데이터 다운로드 

- 관계형 데이터베이스 ( Relational DataBase Management System , RDBMS )

-> 데이터를 테이블에 직관적으로 간단하게 나타내는 관계형 모델 기반

-> SQL 을 사용해 데이터를 기록 및 쿼리 

 

2.3 데이터 구조 살펴보기 

 

- head() : 데이터프레임의 처음 다섯행 확인

- info() : 전체 행수, 각 특성의 데이터 타입과 null이 아닌 값의 개수 등 정보 확인

- value_counts() : 범주형(categorical data)의 각 카테고리 정보 및 개수 확인 

- describe() : 숫자형 특성(numerical data)의 요약정보, ( e.g count, mean, min, max, ... ) 

- hist() : 모든 숫자형 특성에 대한 히스토그램 출력 (시각화 ) 

 

2.4 테스트 세트 만들기 

- 데이터 스누핑 편향 (data snooping bias ) 

-> 테스트 세트를 미리 들여다 볼경우, 패턴에 속아 특정 머신러닝 모델에 편향됨. 

 

- 무작위로 데이터셋의 20%를 테스트 세트로 분리?

-> 데이터 셋이 충분히 크다면 괜찮지만, 그렇지 않을 경우, 샘플링 편향 (sampling bias)

 

- 계층적 샘플링

-> 전문가의 조언이 필요 ( ex) 전문가 : "중간 소득이 중간 주택 가격 예측에 중요")

-> 중간 소득을 기준으로 계층 샘플링 

 

3. 데이터로 부터 통찰을 더기 위해 탐색하고 시각화 

 

3.1 데이터 탐색 및 시각화 시도 -> 논문, 전문가, 탐색 또 탐색해야함! 

 

3.2 표준상관계수 분석, 특성조합으로 실험! 

 

4. 머신러닝 알고리즘을 위해 데이터를 준비하기 

(1) 누락된 특성 

- dropna() : 해당구역 제거

- drop() : 전체 특성 삭제 

- fillna() : 어떤 값으로 채움 ( 평균, 중간값 등 )

- SimpleImputer() : 사이킷런에서 제공된 함수 

 

(2) 텍스트와 범주형 특성 다루기 

- 1D 배열리스트를 이용할 경우, 가까이 있는 두 값이 떨어져 있는 두 값보다 더 비슷하다고 할 수 있음. 

-> 원 핫 코딩 인코딩(one-hot-encoding) 

 

(3) 특성스케일링 

5. 모델을 선택하고 훈련시키기 

 

6. 모델을 상세하게 조정하기 ( fine-tuning )

 

6.1 Fine-tuning 

 

(1) 그리드 탐색 ( Grid Search ) 

- 적은 수의 조합을 탐구할 때 사용

- 탐색하고자 하는 하이퍼파라미터와 시도해볼 값을 지정 -> 가능한 모든 하이퍼파라미터 조합에 대해 교차 검증을 사용해 평가

 

(2) 랜덤 탐색 ( Randomized Search ) 

- 탐색하이퍼파라미터 탐색공간이 커질 경우에 사용

- 가능한 모든 조합을 시도하는 대신 각 반복마다 하이퍼파리미터에 임의의수를 대입하여 지정한 횟수만큼 평가 

- 단순히 반복 횟수를 조절하는 것만으로 하이퍼파라미터 탐색에 투입할 컴퓨팅자원 제어가능 

 

(3) 앙상블 방법  ( Ensemble ) 

- 최상의 모델을 연결해서 사용(개개의 모델이 각기 다른 형태의 오차를 만들때 적합) 

 

6.2 최상의 모델과 오차분석 

 

7. 솔루션 제하기

8. 시스템을 런칭하고 모니터링하고 유지보수하기 

* 7,8번은 흐름만 알아두자! 자세한건 1-6번 익숙해진담에! 

반응형
Comments