ML 프로젝트가 지속되지 못하는 이유는?

ML 엔지니어들이 비즈니스 지표 개선에 목표를 두지 않기 때문이다.

 

결국 프로젝트에 예산을 투입하는 관리자들의 목표는 직접적으로는 매출을 올리고, 비용을 줄여서 주주의 이익을 극대화하는 것이다.

 

그러나 ML 엔지니어들은 이런 비즈니스 지표 보다는 모델 성능 지표에 더 관심을 가지고 개선하려고 한다. (e.g 정확도, F1 점수, 추론 레이턴시 등)

  • F1 점수는 모델의 성능을 평가할 때 사용되는 지표임. 정밀도와 재현율의 조화 평균을 나타낸다.
  • 정밀도는 모델이 True 라고 평가했는데, 실제 레이블도 True 인 항목의 비율.
  • 재현율은 실제 True 인 항목 비율 중에서 모델이 True 라고 분류한 비율

 

Q) ML 지표와 비즈니스 지표를 연결 시키기 위해서는 어떻게 해야할까?

 

데이터 기반으로 추론을 해보거나, 실험을 해봐서 연결 시켜야한다.

 

데이터 기반으로 추론을 하는 예시)

  • 넷플릭스 기준으로 추천 시스템의 채택율 성능 개선이 구독 취소와도 연관이 있고, 높은 스트리밍 시간과도  연관이 있다는 걸 발견함.

 

실험을 해보는 거는 여러 모델의 A/B 테스트를 통해서 어떤 모델이 비즈니스 지표와 연관이 더 있는지 확인해보는 것.

 

ML 시스템에 필요한 기본적인 요구사항들은?

크게 네 가지 기본 요구사항이 있다. 신뢰성, 확장성, 유지보수성, 적응성

 

신뢰성:

  • 모델이 올바르게 예측을 하는 것을 말한다. 전통적인 소프트웨어보다 ML 시스템은 신뢰성을 확인하기가 더 어렵다. 전통적인 소프트웨어는 404 에러나 에러 로그의 비율 등을 통해서 알 수 있지만, ML 시스템은 조용히 잘못된 결과를 낼 수 있기 떄문에.

 

확장성:

  • 모델이 확장하는 요소는 다양하게 있다:
    • 매개변수 수 증가로 인해 사용하는 시스템 메모리 증가
    • 사용되는 데이터 증가
    • 사용하는 모델의 수 증가
    • 트래픽 증가
  • 매개변수 수가 증가해도 모델에 따라서 Scale Out 을 할 수 있기도 하다:
    • 모델 병렬화가 가능한 것이 있음. 하나의 큰 모델을 여러 작은 모델로 나눠서 각각 병렬화해서 훈련하는 것. 심층 신경망의 경우 각 Layer 마다 분산해서 병렬 처리가 가능하다.
    • 모델 추론은 Scalue Out 을 쉽게 할 수 있다. 서버 더 띄우고 로드 밸런싱을 적용하면 되니까. 그리고 Auto Scaling 방법을 적용하는 것도 있음.
  • 데이터 수도 증가하므로, 대규모 데이터를 처리할 수 있는 능력 또한 필요하다.
  • 사용하는 모델의 수가 증가하면 모델 아티팩트 관리도 필요하다.
    • 모델 1개를 관리하는 것과 100개를 관리하는 건 다른 문제임.
    • 자동화 기능이 필요하다. (e.g 모델 재훈련, 모니터링 등)

 

유지보수성:

  • 문서화를 하고, 코드, 데이터, 아티팩트 버전들을 관리하는 것

 

적응성:

  • 시스템을 지속적으로 변화시키고 개선시킬 수 있는 것을 말한다.

 

Q) 신뢰성 지표를 확인하려면 어떻게 해야할까?

 

새로운 데이터에 대해서는 레이블이 없으니까, 모델의 성능 지표인 정밀도, 재현율 같은 지표를 얻기는 힘들다.

 

대신에 다음과 같은 방법들이 있다:

  • 프록시 지표 활용: 프록시 지표를 활용해서 간접적으로 모델의 성능을 평가하는 방법도 있다.
    • 프록시 지표: 추천 시스템의 경우에는 클릭율 같은 걸 따지는 것.
  • 사용자 피드백 수립:
    • 사용자로부터 피드백을 받아서 예측이 올바른지 검사하는 것.
  • 정기적인 성능 평가:
    • 정기적으로 레이블이 포함된 새로운 데이터 + 기존 데이터를 가지고 모델을 평가하는 것.
  • 비지도 학습인 경우에는 이상치 판단으로 모델 예측이 크게 벗어났다고 판단할 수 있다.

 

ML 시스템 설계 프로세스는?

ML 개발 과정은 워터풀 방식이 아니다. 아래의 1-6 과정을 반복하고, 5의 작업을 하다가 2번부터 다시 할 수도 있다.

  1. 프로젝트 선정
  • 비즈니스에 맞게 ML 목표를 선정하는 것.
    • 비즈니스 목표는 멀로 정할 거고 ML 이 적합한 솔루션인지 판단하는 과정 

 

  1. 데이터 엔지니어링
  • 원시 데이터에 접근한 후 학습 데이터를 샘플링하고, 레이블링 하는 것

 

  1. 모델 개발
  • 데이터를 바탕으로 모델을 학습시키고 피처 엔지니어링 하는 것.

 

  1. 배포

 

  1. 모니터링과 연속 학습
  • 성능 저하를 모니터링 하고 모델을 지속적으로 새로운 데이터로 개선하는 것

 

  1. 비즈니스 분석
  • 모델 성능을 바탕으로 비즈니스 적인 인사이트를 도출하는 것.
  • 새로운 모델을 개발하거나, 모델을 개선하거나, 이 프로젝트를 중단할 수도 있다.

 

ML 시스템을 설계할 때 마주하는 작업들은?

1. 최적화할 지표를 선정하는 것. (e.g 광고 노출 횟수 목표를 지정)

 

2. 데이터를 수집하고 레이블링 하는 것

 

3. 피처 엔지니어링 작업을 하는 것

 

4. 모델을 훈련하는 것

 

5. 모델 훈련 중에 잘못 레이블링 된 데이터를 발견하고 다시 레이블링 하는 것

 

6. 모델을 다시 훈련하는 것

 

7. 모델의 오류를 개선하는 과정 중에 보유한 데이터 중에 음성 레이블 된 데이터가 대부분임을 판단하고, 다시 데이터를 수집하는 것.

  • 음성 레이블이란, 이진 분류에서 긍정(Positive)과 부정(Negative) 로 분류되는 데이터에서 Negative 로 된 데이터를 말한다.
  • 데이터가 과도하게 한 쪽으로만 편향되어 있다면, 올바르게 예측을 못할 것임.

 

8. 모델을 다시 훈련하는 것

 

9. 모델이 과거 데이터에는 잘 작동하지만, 최신 데이터에는 잘 작동하지 않음을 판단하고 최신 데이터 위주로 학습을 하는 것.

 

10. 모델을 배포하는 것

 

11. 모델에서 비즈니스 지표가 잘 나오지 않는 것을 판단하고, 모델의 목표를 변경하는 것. 다시 1단계부터 시작한다.

 

 

머신러닝 문제를 구조화 하는 방법은?

단순하게 이런 요청을 받았다고 가정해보자. "경쟁 은행은 ML 을 사용해서 고객 요청을 처리하는 속도가 2배 빨라졌대. 우리도 ML 을 적용해보자."

 

ML 은 입력과 출력 데이터를 바탕으로 학습 프로세스를 거쳐서 예측하는 것이다. 그리고 이 예측에는 목적 함수의 최적화가 있는 것이고.

 

그러므로 이런 질문을 받으면 어떤 ML 시스템이 어떤 목적을 가져야하는지 판단해야한다.

 

ML 엔지니어라면 이 질문을 어떤 머신러닝 문제로 구조화 할 수 있는지 결정해야한다.

 

예시로 들면, 고객 요청 응답에서 병목이 있음을 판단하고 고객 요청을 회계, 재고, 인사, IT 등 다양한 부서 중 적합한 곳으로 라우팅하는 목적이 있으면 되겠다 라고 정하는 거다.

 

 

올바르게 머신러닝 문제를 구조화 하는 방법은?

예시로 보자. 스마트폰 사용 데이터를 바탕으로 다음 앱으로 어떤 앱을 사용할 지 예측하는 ML 시스템이 있다고 가정해보자.

 

단순하게 다중 클래스 분류로 이 문제를 접근하게 되면, 앱이 새로 추가될 때마다 새롭게 학습을 해야한다. 범주가 추가되었으니까.

 

그치만 어떤 앱을 선택할 확률인 회귀로 접근하게 된다면, 앱이 추가될 때마다 새로 학습하지 않아도 된다.

 

 

머신러닝 작업 유형은?

머신러닝은 크게 분류 vs 회귀로 나뉜다. 물론 회귀 모델은 분류 모델로, 분류 모델은 회귀 모델로 변경하는 것은 가능하다.

 

회귀:

  • 연속적인 값을 출력하는 것

분류:

  • 여러 클래스로 분류하는 것.

 

이진 분류 vs 다중 클래스 분류

이진 분류가 다중 클래스 분류보다 훨씬 간단하다.

 

Q) 다중 클래스 분류가 더 어려운 문제인 이유는?

  • 모델 성능 평가가 더 어렵다.
    • Confusion Matrix 는 모델의 성능을 평가하는 지표로, 실제 레이블과 모델의 예측을 비교해서 모델 예측이 얼마나 잘 되었는지를 보여준다. 시각화해서 주로 봄.
    • 이진 분류에서 Confusion Matrix 를 볼 때 확실히 더 평가하기 쉽다고 한다.
  • 데이터 수집 측면:
    • 클래스로 분류하기 위해서는 최소 100개 정도의 데이터가 필요하다고 함.

 

Q) 다중 클래스 분류에 도움되는 팁은?

 

계층 분류를 하면 더 유용하다고 한다.

 

상위 카테고리로 먼저 분류하고, 하위 카테고리로 분류하는 방식임.

 

 

다중 클래스 vs 다중 레이블 분류

다중 클래스 분류는 하나의 범주에 속하는 거라면, 다중 레이블 분류는 여러 범주에 속할 수 있는거다.

 

뉴스로 치면 다중 레이블에서는 하나의 뉴스가 금융, IT 등의 카테고리에 속할 수 있는거임.

 

Q) 다중 레이블 분류가 더 어려운 이유는?

 

다중 레이블 분류가 다음 측면 때문에 더 해결하기 어려운 문제이다.

  • 레이블링 작업과 불일치:
  • 예측에서 어려움.
    • 예를 들어 각 범주에 속할 확률로 나온다고 치자 그러면 어떤 확률부터 범주에 속한다고 판닫해야할까?

 

Q) 다중 레이블 분류 접근 방법은?

  • 이진 분류 집합을 사용하는 것. 각 범주에 속함을 판단하는 걸 이진 분류로 쓰는 거지.
  • 다중 클래스 분류와 동일하게 처리하는 것.

 

 

목적함수는?

목적 함수는 학습 과정에서 최적화 하기 위해 사용되며 손실 함수라고도 불린다. 예측이 실패했을 때, 손실을 최소화 하는 함수.

 

목적 함수를 바탕으로 예측이 얼마나 잘 되었는지 성능을 비교할 수 있다.

 

ML 시스템이 예측을 하는데 사용하는 예측 함수는 목적 함수가 최적화 된 함수라고 판단해도 된다.

 

 

목적함수는 분리하는 것이 좋을까?

비즈니스에 따라 목적 함수를 여러개 사용할 수 있다.

 

뉴스 피드 항목의 순위를 지정하는 랭킹 시스템을 만든다고 가정해보자.

 

사람의 참여도를 극대화 하기 위한 목적 함수를 만들 수 있을 것이다. 그러나 자극적인 컨텐츠가 높은 랭킹을 가질 것이기 때문에, 내용의 품

질에 따른 랭킹을 지정하는 목적 함수 또한 만들 수 있다.

 

이렇게 여러 개의 목적 함수가 있는 경우에 목적 함수들을 결합해서 단일 모델로 작동하는 방법이 있고, 목적 함수마다 단일 모델을 만들어서

모델의 예측을 결합해서 최종 예측을 내도록 하는 방법도 있다.

  • 이렇게 두 손실 함수를 하나로 결합해서 단일 모델을 만드는 과정에서는 다목적 최적화가 쓰인다.

 

독립적인 모델을 쓰는 방식이 배포나 훈련 등 유지보수 측면에서 유리하다.

 

 

Reference

'Machine Learning' 카테고리의 다른 글

모델 개발과 오프라인 평가  (0) 2024.04.15
피처 엔지니어링  (0) 2024.04.11
훈련 데이터  (0) 2024.04.05
데이터 엔지니어링 기초  (0) 2024.04.03
머신러닝 시스템 개요  (0) 2024.04.01

+ Recent posts