본문 바로가기

카테고리 없음

Machine Learning과 ETL 파이프라인

Machine Learning이란

일반적인 개발에서는 어떤 input을 통해 명시적으로 작성한 코드에 의해 분기처리와 여러 연산을 하여 output을 구한다.

머신러닝(ML)을 통한 개발의 경우, input을 통해 output을 구하는 명시적인 로직을 사람이 작성하지 않는다. 대신 모델이 학습 데이터로부터 그 경향성을 파악하고, 이후 input에 대해 적절한 output을 예측한다.

대신 학습 데이터를 통해 input에 따른 output의 경향을 파악하고 추후 들어오는 input을 통해 output을 예측한다.

예를 들면 현재 관측된 기상 데이터를 통해 내일 날씨를 예상한다고 해보자.

 

일반적인 개발

const todayData = await fetch("https://기상청.com/today")
const { 습도, 온도, 구름 } = await todayData.json() 

function predict(습도, 온도, 구름) {
  if (습도 > 50) {
    if (온도 > 27) {
      if (구름 == '많음') {
        return '비 올 가능성 20%'
      }
      else {
        return '맑을 가능성 35%'
      }
    }
  }
  ~~~
}

const tomorrow = predict(습도, 온도, 구름)

 

머신러닝을 통한 개발

const todayData = await fetch("https://기상청.com/today")
const { 습도, 온도, 구름 } = await todayData.json() 

// 과거 데이터로 학습
const pastData = await fetch("https://기상청.com/history")
const model = MachineLearning.학습(await pastData.json())

// 학습된 모델에 오늘 날씨를 넣고 내일 날씨 예측
const tomorrow = model.예측(습도, 온도, 구름)

 

Machine Learning의 정확도

ML의 정확도를 개선하는 방법에는 크게 두 가지가 있다. 데이터의 양과 질을 올리는 것, 모델을 개선하는 것

모델을 개선하는 것은 위의 코드에서는 .'MachineLearning.학습(await pastData.json())' 으로 MachineLearning이라고 러프하게 표현했지만 실제 개발시에는 모델에 대한 여러 세팅이 들어간다. 학습을 시키는 전략과 파라미터, 학습 과정에 대한 로직 등이 포함된다. 이 포스팅에서는 모델 보다는 데이터에 대해 초점을 맞추겠다.

 

ETL 파이프라인

위의 코드 예시에서는 심플하게 기상청에서 모든 데이터를 가져왔다고 가정했다.

하지만 실제 모델을 학습시키는 경우 데이터의 양이 아주 방대해야하고 API하나 호출한다고 학습에 필요한 데이터가 잘 가공된 상태로 오지도 않는다.

그럼 우리는 세 가지 과제가 생긴다.

데이터를 수집하는 것, 모델에 적합하게 데이터를 가공하는 것, 데이터를 쉽게 가져올 수 있도록 저장하는 것

이는 최근 AI를 도입하는 플랫폼에서 데이터 엔지니어의 주업무이며 ETL 파이프라인이라고 한다.

ETL 파이프라인이란 E(Extract 추출), T(Transform 변환), L(Load 적재)를 뜻한다.

앞서 설명한 세 가지 과제와 일치하는 개념이다.

ETL 파이프라인을 잘 구축하는 것이 곧 데이터의 양과 질을 개선하는 것이다.

 

데이터 수집의 경우 실시간 처리와 배치 처리로 나뉜다.

실시간 처리는 유져와의 상호작용(MSA 내 다른 API 호출, 프론트 상호작용 등)에서 발생하는 데이터를 수집하는것이다.

배치 처리는 정해진 시각에 한번에 데이터를 수집하는 것으로 크롤링, 책에서 글 추출, DB내 에서 추출 등이 있다.

 

변환의 경우 원래 있어야 하는 특정 컬럼의 데이터가 없는 경우 로우를 없애거나 전체 경황에서 너무 벗어난 데이터를 지우는 등의 작업을 한다. 또한 모델에 적합하게 값의 범위를 0~1 사이로 조정하는 등 여러 작업이 있다.

 

적재의 경우 데이터를 필요할 때 빠르고 쉽게 찾을 수 있게 하는 것이 목적이다.

따라서 인덱스를 걸거나 원래의 데이터를 비정규화 하는 등의 작업이 필요할 수 있다.

또한 데이터의 양이 워낙 방대하기에 DB가 설치된 컴퓨터 한 곳에 저장하는 것이 아닌 여러 컴퓨터에 분산하여 저장하는 경우가 많다. 따라서 클러스터링된 컴퓨터를 관리하고 필요시에 클러스터를 확장할 수 있는 구조로 설계하는 것이 바람직하다.

 

 

정리

Machine Learning은 일반적인 개발과 달리 명시적인 로직이 없다.

인공지능의 정확도는 학습 데이터의 양과 질, 모델의 자체 성능으로 결정된다.