데이터 소스에 대해서

Q) 데이터 소스란?

 

데이터가 생성되는 곳을 말한다.

 

데이터는 다양한 곳에서 생성될 수 있으며, 이런 데이터들은 ML 에서 사용된다.

 

데이터 소스에서 생성되는 데이터의 특징에 대해 아는 것이 중요하다. 이 특징에 따라서 처리 방법이 달라질 거니까.

 

 

Q) 데이터 종류는?

 

다음과 같다:

  • 사용자 입력 데이터
  • 시스템 생성 데이터
  • 내부 데이터베이스 데이터
  • 서드 파티 데이터

 

사용자 입력 데이터:

  • 사용자가 입력한 데이터를 말한다. (e.g 텍스트, 이미지, 비디오, 업로드된 파일 등)
  • 이 데이터는 잘못 입력되어있을 확률이 높기 때문에, 철저한 검사가 필요함.
  • 그리고 사용자는 해당 데이터가 빠르게 처리됨을 원하기 때문에 래이턴시가 중요하다.

 

시스템 생성 데이터:

  • 시스템이 생성한 데이터를 말한다. (e.g 로그, 시스템 출력, 사용자 행동 데이터 등)
  • 이런 데이터는 시스템의 상태를 나타내는 경우가 많으며, 문제가 생겼을 떄 해당 데이터를 통해 해결할 것이다. 그러므로 잘 기록해두는 것이 중요하다.
  • 에러와 관련된 데이터를 제외하고는 주기적으로 지워도 됨.
  • 사용자 데이터와 달리 포맷이 잘못될 확률은 거의 없음.
  • 데이터의 양이 급증할 수 있음.
  • 비용을 줄이기 위해서 엑세스 빈도가 낮은 데이터는 콜드 스토로지에 기록하는 것이 좋음.
  • 사용자 행동 데이터 (e.g 클릭, 제안 선택, 스크롤, 확대 및 축소, 팝업 무시, 특정 페이지에서 오래 머무르기) 등은 개인 정보 보호 규정이 적용됨.

 

내부 데이터베이스 데이터:

  • 회사에서 수집한 데이터들을 말한다. (e.g 재고, 고객 관계, 자산 등)
  • 이런 데이터는 ML 모델에서 사용되거나, ML 시스템과 연관된 다양한 시스템에서 사용된다.
    • 예를 들면, 아마존에서 frozen 이라고 검색하면 검색 플랫폼에서 여러가지 상품을 조회할 것이다. 냉동 식품부터 시작해서 겨울 왕국까지. 그리고 이런 데이터들에 랭킹을 매겨줄텐데, 사용자의 행동 이력과 연계해서 ML 모델이 랭킹을 매겨줄거임. 이런 식으로 회사 데이터는 ML 뿐 아니라 ML 과 연관된 시스템에서도 사용된다.

 

서드 파티 데이터:

  • 정의:
    • 서드 파티 데이터는 공공 데이터를 수집한 걸 말한다.
    • 퍼스트 파티 데이터가 회사에서 고객에 대한 데이터를 직접 수집한 걸 말하는 거임.
    • 세컨드 파티 데이터는 다른 회사에서 고객에 대한 수집한 데이터를 말하는 거임.
  • 이런 서드 파티 데이터는 이전에 스마트폰에서 많이 생성되었고, 이를 구매하기도 많이함.
    • 아이폰에서는 애플 IDFA 가 있고, 안드로이드에서는 AAID 가 있는데 이런 ID 를 바탕으로 해당 스마트폰에서 생성된 데이터를 모두 수집하는게 가능했음 (웹과 앱 활동 이력 등).
    • 그래서 이 데이터를 구매해서 ML 에 많이 쓰이기도 함. (e.g A 브랜드를 좋아하는 사람은 B 브랜드도 좋아하더라 등)
    • 하지만 애플에선 IDFA 수집 방식을 옵트인으로 하면서 사용자가 허용해줘야만 데이터를 수집할 수 있게 됨.
    • 물론 이에 대한 대응 방법을 찾기 위해서 중국에서는 CAID 라는 곳에 투자해서 틱톡과 텐센트 같은 앱은 사용자를 계속 추적할 수 있음.
    • CAID 는 디바이스 ID 임. 이런 우회 수단을 사용하다가 애플한테 걸러민 앱 스토어에 삭제됨.

 

데이터 포맷을 정하는 방법

Q) 데이터 포맷이란?

 

데이터 포맷은 데이터가 저장되는 방식을 말한다.

 

주로 사용 용도에 맞게 데이터 포맷을 저장하는게 좋다.

 

일반적으로 데이터 포맷은 다음 특성에 따라 분류된다:

  • 이진/텍스트
  • 사람이 읽을 수 있는가?
  • 어디에 사용될 수 있는가?

 

Q) 데이터 포맷의 종류는?

데이터 포맷 이진/텍스트 사람이 읽을 수 있는가? 유스 케이스 대표적인 특징
JSON 텍스트 웹 개발, API 통신 사람이 읽기 쉬움, 구조화된 데이터 표현, 경량
CSV 텍스트 데이터 교환, 스프레드시트와의 호환 간단하고 널리 사용됨, 엑셀 등과 호환
Parquet 이진 아니오 빅 데이터 처리, 분석 워크로드 열 기반 스토리지, 고효율 압축 및 인코딩
Avro 이진 아니오 데이터 직렬화, 하둡 에코시스템 스키마가 포함된 자체 기술 문서화, 효율적인 데이터 압축
Protobuf 이진 아니오 시스템 간의 통신, 데이터 저장 구글 개발, 작은 메시지 크기, 빠른 처리
Pickle 이진 아니오 파이썬 객체 직렬화 및 역직렬화 파이썬 전용, 코드 내 객체 저장 및 전송에 사용

 

 

Q) 행 우선 포맷과 열 우선 포맷의 차이는?

 

대표적인 행 우선 포맷 데이터로는 CSV 가 있고, 열 우선 포맷 데이터로는 Parquest 가 있다.

 

행 우선 포맷은 데이터가 메모리에 행 단위로 연속적으로 분포되어 있고, 열 우선 포맷은 열 단위로 연속적으로 데이터가 메모리에 분포되어있다.

 

행 우선 포맷과 열 우선 포맷의 차이:

  • 성능:
    • 최신 데이터는 순차 데이터를 처리하는게 훨씬 효율적이니, 여러 행에 접근해서 처리하는 방식이라면 행 우선 포맷이 성능적으로 유리하고, 열 단위로 접근해서 처리하는 방식이라면 열 우선 포맷이 성능 적으로 우수하다.
  • 용도:
    • 행 우선 포맷:
      • 모델 학습. 모델 학습에서는 행 단위로 엑세스 하기 떄문에
      • 새로운 데이터 레코드 쓰기. 이것도 행 단위이기 떄문에.
    • 열 우선 포맷:
      • 피처 엔지니어링. 피처 엔지니어링은 열 단위로 엑세스 하기 때문에.
      • 쓰기 보다는 열 기반 읽기에 사용되는 곳

 

Q) 텍스트 포맷과 이진 포맷의 차이는?

 

텍스트 포맷이 사람한테는 더 편한 반면에 데이터 사이즈가 이진 포맷보다 더 크다.

 

AWS 에서는 텍스트 포맷보다는 Parquest 같은 포맷 사용을 권장한다. unload 속도가 2배 더 빠르고, 최대 6배 적은 스토로지를 사용한다고 함.

  • unload 속도라는 건 데이터를 추출해서 보내는 과정을 말한다.

 

 

Q) CSV 는 사용하지 말라는 말이 있는데 이건 뭔가요?

 

CSV 에서는 텍스트 데이터를 제외한 부동 소수점 같은 데이터에서는 일부 잘리는 현상이 있기 떄문임. 그래서 사용에 반대함.

 

데이터 모델을 정하는 방법

Q) 데이터 모델이란?

 

데이터 표현을 말한다. 즉 데이터가 어떤 속성들을 가지고 있는지 표현하는 걸 말함.

 

자동차를 예시로 들면, 제조사, 모델, 연도, 색상, 가격 등을 이용해서 표현할 수 있는거임.

 

이렇게 데이터 표현이 중요한 이유는 데이터 모델에 따라서 용도에 맞게 사용되는거임.

 

같은 자동차 데이터라도 데이터 모델이 차량 소유자, 번호판 및 등록된 주소 등으로 데이터를 표현한다면 이건 범죄자를 잡는데 사용될 거임.

 

 

Q) 데이터 모델의 종류는?

 

대표적으로는 관계형 모델, 문서형 모델, 그래프 모델이 있음.

 

관계형 모델:

  • 정규화를 통해 데이터를 중복 없이 표현하는게 가능.
  • 데이터가 여러 관계로 나눠지기 때문에, 이를 합치는 조인 작업이 많다면 성능이 나오지 않을 수 있음.

 

문서형 모델:

  • 관계형 모델의 가장 큰 불만은 엄격한 스키마를 따라야 하는 거라고 함. 문서형 모델은 이런 스키마로부터 자유롭다.
  • 대신에 조인 작업을 잘하진 않음.

 

Q) 정형 데이터와 비정형 데이터의 차이는?

 

정형 데이터:

  • 엄격한 스키마 제한이 있다. (e.g 'name' 은 최대 50자의 문자열이고, 'age' 는 0과 200 사이 8비트 정수이다.)
  • 스키마 제한 때문에 변화나는 데이터를 다루기에는 어려움이 있다.

 

비정형 데이터:

  • 스키마 제한이 없으니 변화하는 데이터라도 쉽게 저장할 수 있다. (일단 바이트스트링으로 변경시켜서 저장하면 된다.)
  • 데이터를 사용하는 측에서 구조를 잡고 사용해야함.

 

 

선언적 ML 시스템은 뭔가?

선언적 ML 시스템은 사용하는 데이터 구조와 각 피처의 타입(e.g 범주형, 연속형) 을 선언하고, 원하는 작업 (e.g 분류, 회귀, 클러스터링 등)을 선언하기만 하면 된다.

 

모델 구성, 훈련, 조정과 관련된 코드를 작성하지 않아도 된다고 함.

 

선언적 ML 시스템 예시인 AutoML 은 하이퍼파라미터나 모델 구조와 같은 것도 입력하지 않아도 된다고 함.

 

Q) 하이퍼파라미터는 무엇인가요?

 

하이퍼파라미터는 모델 학습 결과에 영향을 주지만, 자동으로 학습되지 않는 외부 설정 값을 말한다.

 

하이퍼파라미터는 다음과 같은 값들이 있다:

  • 학습률 (learning rate): 모델 학습 시 가중치를 얼마나 크게 조정할 건지 결정하는 것. 너무 높으면 최적값을 넘길 수 있고, 너무 낮으면 학습이 너무 느려진다.
  • 배치 크기 (batch size): 한 번의 학습 단계에서 사용되는 데이터 샘플링 수. 배치 크기가 높으면 더 많은 데이터를 사용하니까 더 많은 메모리를 사용하게 된다. 그러나 학습이 안정적임.
  • 에폭 수 (number of epochs): 전체 데이터 세트를 사용해서 학습을 수행하는 횟수. 높을수록 패턴을 더 잘 찾는 경향이 있다. 그러나 너무 높게되면 overfitting 문제가 발생한다.
  • 정규화 매개변수 (regularization parameters): 모델의 복잡도를 조절해서 과적합을 방지하는데 사용된다.
    • 정규화 매개변수는 손실 함수에서 추가되는 항으로 작용한다. 모델의 가중치에 대한 패널티를 부과해서 가중치 값이 너무 크게되지 않도록 만든다.
    • 이 값이 크게되면 과적합을 막을 수 있지만 패널티를 너무 과하게 적용해서 과소적합(underfitting) 이 발생할 수도 있다. (과소적합된 모델은 학습 데이터뿐만 아니라 새로운 데이터에서도 성능이 좋지 않다.)

 

 

Q) 모델 구조는 무엇인가요?

 

모델의 구성 요소와 요소들이 어떻게 연결되어 있는지를 나타낸다.

 

특히 신경망 모델에서 주로 다뤄지며, 모델이 데이터를 학습하는 방식을 결정한다.

 

모델 구조는 다음과 같다:

  • 층의 수(number of layers): 신경망의 깊이, 즉 입력층과 출력층 사이에 있는 은닉층의 수
  • 유닛의 수(number of units): 각 층에 있는 뉴런(또는 유닛)의 수입니다. 이는 층의 너비를 결정
  • 활성화 함수(activation functions): 각 뉴런의 출력을 결정하는 함수로, 비선형성을 도입하여 모델이 복잡한 패턴을 학습할 수 있도록 함.
  • 층의 종류(layer types): 완전 연결 층(fully connected layers), 합성곱 층(convolutional layers), 순환 층(recurrent layers) 등 모델에 사용되는 다양한 유형의 층

 

 

Q) AutoML 은 실제로 프로덕션에 사용할만큼의 모델을 잘 만들어주는가?

 

어느 정도는 사용할만한 모델을 만들어주는듯. 여러 유스케이스들이 있긴함.

 

 

Q) 피처 엔지니어링에서 피처를 계산한다는 건 구체적으로 무슨 의미인가?

 

피처 엔지니어링은 이전에도 말했듯이, 원시 데이터에서 유의미한 새로운 데이터를 생성해서 모델이 복잡한 패턴을 파악하기 쉽도록 하는 과정이다.

 

피처를 계산하다는 건 여러 과정이 있는데 대표적으로는 다음과 같다:

  • 피처 생성:
    • 새로운 피처를 생성하는 과정. 기존 데이터에서 수학적 변환을 하거나, 여러 피처를 결합해서 만듬.
  • 피처 변환:
    • 피처에 로그 변환, 제곱근 변환 등을 적용해서 피처의 분포를 조정하거나, 정규화나 스케일링을 적용해서 피처의 범위를 조정하는 작업을 말한다.
  • 피처 선택:
    • 불필요한 피처를 제외시키고, 모델의 긍정적인 피처를 선택하는 작업을 말한다.
  • 피처 추출:
    • 피처 변환과 같은 전처리 작업이며, 고차원 데이터를 저차원으로 변환하는 역할을 한다. 목적 자체는 모델의 학습 용이성 때문임.

 

데이터 스토로지 엔진

Q) 데이터 스토로지 엔진의 종류는?

 

OLAP 와 OLTP

 

 

Q) 데이터 스토로지 엔진의 차이는?

 

PASS

 

 

Q) ETL vs ELT

 

ETL:

  • ETL (Extract -> Transform -> Load) 은 데이터 소스에서 데이터를 가져와서 정제해서 데이터 웨어하우스에 적재하는 작업이다.

ELT:

  • 데이터는 점점 많아지고 있는 상황에서 데이터를 정제해서 데이터 웨어하우스에 적재하는 작업이 점점 부담이 되다 보니까 일단은 데이터 레이크에 적재를 먼저 하자는 취지에서 나온 방식이다.
  • 이전 ELT 는 많은 데이터를 모두 저장하다 보니 스토로지 사용에 대한 금전적인 부담이 되었는데 현재는 스토로지 비용이 싸져서 부담은 아니라고 한다.
  • 그러나 ELT 에서는 여전히 워낙 데이터가 많다보니 원하는 데이터를 검색하는 작업은 느리다.

 

 

데이터를 전달하는 방법

데이터를 전달하는 방법:

  • 데이터베이스 사용:
    • 한 프로세스가 데이터베이스에 데이터를 써줄테니까 알아서 가져가라는 방법임.
    • 같은 회사일 경우에 가능하다.
    • 데이터베이스 부하를 고려해야한다. 쓰기와 읽기가 하나의 DB에서 발생하면 부하가 많을거임.
  • 서비스를 통한 데이터 전달:
    • 서비스 통신을 통해서 원하는 데이터를 가져오는 방식이다. API 를 이용하는 방식임.
  • 실시간 전송을 통한 데이터 전달:
    • Apache Kafka 와 같은 메시지 큐 서비스를 쓰는 방식임.

 

Q) 이벤트 기반의 아키텍처를 사용하는 이유는?

 

느슨한 결합 때문에. 여러 서비스들이 서로 통신해서 데이터를 가져오는 상황을 생각해보면 된다. 서비스가 하나씩 추가될 때마다 복잡해진다.

 

 

배치 처리와 스트림 처리

Q) 배치 처리와 스트림 처리의 차이점은?

 

배치 처리:

  • 작업 주기가 길다.
  • 처리하는 데이터 양이 많다.
  • 정적 피처에 어울린다. (e.g 운전자 평점)
  • Apache Spark 를 주로 쓴다.

 

스트림 처리:

  • 작업 주기가 짧다.
  • 처리하는 데이터 양은 적다.
  • 상태 유지를 할 수 있다. 예를 들면, 30일 동안의 사용자 데이터를 처리한다고 했을 때 배치 처리는 기존의 데이터를 포함해서 처리하겠지만 스트림 처리는 새로운 데이터들만 처리하면서 상태를 누적해나가면 된다.
  • 동적 피처에 어울린다. (e.g 최근 1분 동안 요청된 운행 수, 다음 2분 동안 완료될 운행 수 등)
  • Apache Flink 를 주로 씀

 

Q) 배치 처리로 Apache Spark 를 사용하는 이유는?

 

대용량 데이터 처리를 지원해서.

 

 

Q) 스트림 처리로 Apache Flink 를 사용하는 이유는?

 

병렬로 쉽게 확장 가능 + 다양한 스트림 처리 연산 지원 + 성능도 준수

 

 

Q) 스트림 처리로 Apache Kafka 가 부적합한 이유는?

 

다양한 스트림 처리 연산을 지원하지 않음. 주로 스트림 처리에서 사용되는 피처의 수는 수백-수천개에 달한다.

 

 

 

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

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

+ Recent posts