Chapter 3: 특징 생성 part2

8 minute read

챕터 2의 두번째 파트는 시간과 관련된 데이터를 처리하는 방법, 비지도 학습 알고리즘을 이용하여 특징을 생성하는 방법에 대해 다루고 있다.

3.10 시계열 데이터 처리

3.10.1 시계열 데이터란?

시계열 데이터 에는 특유의 성질이나 주의점이 있다. 그래서 시간적 정보를 적절히 다루지 않을 경우 본래대로라면 예측에 사용이불가능한 정보를 이용해 특징을 만들 때도 있다.

  • 시계열 데이터: 시간의 추이와 함께 순차적으로 관측한 데이터
  • 시계열 데이터를 다루는 방식은 다음과 같은 관점에서 접근할 수 있다.
    • 시간 정보를 가지는 변수가 있는지 여부 → 시간 정보를 적절히 활용해 특징 생성 가능
    • 학습 데이터와 테스트 데이터가 시계열로 나누어져 있는지, 시간에 따라 분할하고 검증해야 할지의 여부 → 시간에 따라 분할한 검증을 실시함과 동시에 특징에 관해서도 미래 정보를 부적절히 사용하지 않게 주의해야 함
    • 사용자나 매장 등 계열별로 시계열의 목적변수가 있는지, lag 특징을 취할 수 있는 형식이 있는지의 여부 → 과거의 목적변수가 미래 예측에 중요한 정보가 되므로 lag특징을 만듬

3.10.2 데이터 정보 누출을 대비한 제약사항

시계열 데이터를 다루는 과정에서는 목적변수의 데이터 정보 누출이 발생할 가능성이 있다. 데이터 정보 누출은 다음과 같은 경우에 발생한다.

  • 목적변수가 과거의 목적변수의 정보를 포함할 경우
  • 목적변수 이외의 데이터가 과거의 목적변수 정보를 포함할 경우

만약 검증 데이터에 훈련 데이터보다 과거 시점에 대한 정보가 포함되어 있으면 데이터 정보 누출이 발생할 수 있으므로 이 점을 유의하면서 데이터를 다뤄야 한다.

3.10.3 와이드 포맷과 롱 포맷

  • 와이드 포맷(wide format): 키가 되는 변수 A, B를 각각 행과 열로 하고, 관심 대상 변수 C를 값으로 하는 형식의 데이터셋이다. 키가되는 변수는 날짜와 사용자이고 관심 대상 변수는 이용 시간이다.
  • 롱 포맷(long format): 키가 되는 변수 A, B를 모두 열로 하고, 대상 변수 뿐만 아니라 다른 변수도 열에 포함할 수 있는 형식의 데이터셋이다. 키가 되는변수인 날짜와 사용자별로 목적변수나 사용자 속성 등의 변수가 유지 가능하다.

롱 포맷에서 와이드 포맷으로 바꾸려면 DataFrame 의 pivot 메서드를 사용하고, 와이드 포맷에서 롱 포맷으로 변경하기 위해서는 DataFrame 의 stack 메서드를 사용한다.

3.10.4 lag 특징

lag 특징이란 다음과 같다.

  • 데이터에서 과거 시점에서의 값을 그대로 활용해 만든 특징이다.
  • 1일 전 값, 2일 전 값과 같이 전날 값을 이용해 lag 특징을 만들 수 있지만 데이터에 주기적인 움직임이 보이면 해당 주기에 따라 lag 특징을 구할 수 있다.
  • shift() 함수를 이용하여 lag 특징을 만들 수 있다. shift(1) 은 하루 전 값, shift(7) 은 일주일 전 값이다.

단순히 날짜를 이동하는 것 뿐만 아니라 이동시켜 일정 기간의 평균값을 얻는 처리인 이동평균(moving average) 도 자주 이루어진다. 이동평균을 구할 때는 팬더스의 rolling 함수와 mean 등의 요약 함수가 조합되어 사용된다. 평균 이외에도 최댓값, 최솟값, 중앙값 등 다른 통계량을 이용할 수 있다.

또한 lead 특징은 lag 특징과는 반대로 미래 시점의 값을 이용해 만든 특징이다. 이 때, 미래의 목적변수는 알 수 없으므로 목적변수의 lead 특징을 구하지 못한다.

3.10.5 시점 관련 특징 생성

데이터를 예측하는 시점보다 과거 정보만을 사용한다는 제약을 지키면서 학습하고 예측하면 시점과 연계된 특징을 만들고 해당 시점을 키로 삼아 학습 데이터와 결합할 수 있다. 방법의 과정은 다음과 같다.

  • 특징을 생성하는 원본 데이터의 집계 등을 통해 시점별 연계 변수를 구한다.
  • 필요에 따라 누적합이나 이동평균을 구하거나 다른 변수와의 차 또는 비율을 구하는 식의 처리를 한다.
  • 시점을 키로 삼아 학습 데이터와 결합한다.

3.10.6 예측용 데이터의 기간

  • 특징 생성에 필요한 과거 기간: 시점 관련 특징을 생성하기 위해 다음과 같은 요소를 고려해야 한다.

    1. 테스트 데이터에는 목적변수의 값이 포함되지 않으므로 목적변수에 관해서는 분할 시점부터 과거의 값만 참조해야 한다.
    2. 테스트 데이터의 기간이 1개월일 때 분할 시점 직후의 데이터에서는 하루 전의 목적변수를 참조할 수 있는 반면 한 달 후의 데이터에서는 한 달 전의 목적변수만 참조할 수 있다.
    3. 이러한 문제를 해결하기 위해 테스트 데이터의 기간이 분할 시점으로부터 며칠 앞에 있는지에 따라 개별적으로 모델을 만들어야 한다.
  • 미래 정보 다루기: 테스트 데이터에서 예측 시점부터 미래의 정보를 이용할 수 있으므로 모델 성능이 올라간다면 lead 특징을 만들어 예측에 유용하게 활용해야 한다.

3.11 차원축소와 비지도 학습의 특징

3.11.1 주성분분석(PCA)

주성분분석 의 특징은 다음과 같다.

  • 차원축소의 가장 대표적인 기법이다.
  • 다차원 데이터를 분산이 큰 방향에서부터 순서대로 축을 다시 잡는 방법으로, 변수간 종속성이 클수록 더 소수의 주성분으로 원래 데이터를 표현할 수 있다.
  • 입력 변수가 정규분포를 따를 때 사용하기 적합한 변환이다.
  • 주성분분석은 사이킷런 decomposition 모듈의 PCA 또는 TruncatedSVD 클래스에서 시행할 수 있다.

데이터에 주성분분석을 적용하면 다음과 같은 분포로 변경된다.

3.11.2 음수 미포함 행렬 분해(NMF)

음수 미포함 행렬 분해(NMF) 은 음수를 포함하지 않은 행렬 데이터를, 음수를 포함하지 않은 행렬들의 곱의 형태로 만드는 방법이다. 이 때, 음수가 아닌 데이터에만 사용할 수 있지만 PCA와는 달리 벡터의 합 형태로 나타낼 수 있다.

3.11.3 잠재 디리클레 할당(LDA)

잠재 디리클레 할당 의 특징은 다음과 같다.

  • 자연어 처리에서 문서를 분류하는 토픽 모델에서 쓰이는 기법, 확률적 생성 모델의 일종이다.
  • 각 문서를 행으로, 각 단어를 열로 하여 해당 문서에 해당 단어가 몇 번이나 나타나는지 보여주는 단어-문서 카운트 행렬을 작성한다. 이 때, 분류할 토픽의 수를 지정해야 한다.
  • LDA 는 베이즈 추론을 이용하여 행렬에서 각 문서를 확률적으로 토픽으로 분류한다.
  • LDA를 적용하면 단어-문서 카운트 행렬, 문서가 각 토픽에 소속될 확률을 나타내는 행렬, 각 토픽의 단어 분포를 나타내는 행렬이 나타난다.

3.11.4 선형판별분석(LDA)

잠재 디리클레 할당과 철자가 같으므로 혼동하지 않도록 조심한다. 선형판별분석(LDA)의 특징은 다음과 같다.

  • 지도 학습의 분류 문제에서 차원축소를 실시하는 방법
  • 학습 데이터가 n행의 행 데이터와 f개의 특징으로 이루어진 n X f 행렬이라 할 때 f X K의 변환 행렬을 곱함으로써 n X K 행렬로 변환한다.
  • 차원축소 후의 차원 수 k는 클래스 수보다 줄어들고, 이진 분류일 때는 변환 후에 1차원 값이 된다.
  • 학습 데이터를 잘 분류할 수 있는 저차원의 특징 공간을 찾고, 원래 특징을 그 공간에 투영함으로써 차원을 줄인다.

3.11.5 t-SNE, UMAP

t-SNE 의 특징은 다음과 같다.

  • 차원축소의 한 방법으로, 데이터를 2차원 평면상에 압축하여 시각화하기 위해 사용된다.
  • 비선형 관계를 파악할 수 있으므로 원래의 특징에 t-SNE로 표현된 압축 결과를 더하면 모델 성능이 올라갈 수 있다.
  • 사이킷런의 manifold 모듈에도 TSNE가 있지만 아직은 활용이 어려우므로 python-bhtsne를 사용하는 게 좋다.

UMAP* 의 특징은 다음과 같다.

  • t-SNE와 마찬가지로 원래의 특징 공간상에서 가까운 점이 압축 후에도 가까워지도록 표현한다.
  • 실행시간이 매우 빠르다는 것이 장점이다.

3.11.6 오토인코더

오토인코더(autoencoder) 의 특징은 다음과 같다.

  • 신경망을 이용한 차원 압축 방법
  • 입력 차원보다 작은 중간층을 이용하여 입력과 같은 값으로 출력하는 신경망을 학습함으로써, 원래의 데이터를 재현할 수 있는 더 저차원의 표현을 학습한다.

3.11.7 군집화

군집화(clustering) 의 특징은 다음과 같다.

  • 데이터를 여러 그룹으로 나누는 비지도 학습
  • 데이터가 어느 그룹에 분류 되었는지에 대한 값을 특징으로 할 수 있고, 클러스터 중심으로부터의 거리를 특징으로 할 수도 있다.
  • 군집을 수행하는 알고리즘은 K-Means, DBSCAN, 병합군집이 있다.

3.12 기타 기법

경진 대회에서는 다양한 문제와 데이터가 주어지는데 데이터의 종류에 따라 다양한 기법을 적용하여 특징을 생성할 수 있다.

3.12.1 배경 매커니즘의 이해

분석 대상 데이터에 관한 배경 지식을 이용해 여러 특징을 생성할 수 있다. 다음과 같은 요소들에 집중하면 새로운 특징을 생성할 수 있다.

  1. 사용자 행동에 주목
    • 사용자 성격, 행동 특징, 행동 사이클을 표현하는 특징 만들기
    • 이용 목적의 클러스터로 나눠 생각하기
    • 특정 상품에 대한 선호도가 있을지 생각하기
    • 같은 물건을 이미 구매한 경우 등 행동 저해 요소는 없을지 생각하기
    • 사용자가 웹사이트에서 어떤 식으로 화면을 이동하여 상품을 구매했는지 살펴보기
  2. 서비스 제공 측의 동향 주목
    • 어떤 상품의 판매 개수가 0이라 해도, 수요 자체가 없었다기보다는 무언가의 사정으로 재고가 없었던 경우일 가능성
    • 휴가나 유지보수 작업이 그 전후 기간의 서비스 이용에 미치는 영향
    • 앱/웹 서비스로 검색하면 맨 위에 표시될지 여부와 상관관계가 있을 법한 특징 생성
    • 앱/웹 서비스에서의 검색이나 리스트 박스의 선택사항을 고려
  3. 업계에서 주로 사용하는 분석 방법
    • RFM 분석이라는 고객 분석 기법을 이용하여 사용자 분류와 특징을 생성
    • 개인의 신용 리스크를 심사할 때 어떤 항목이 대상이 될 수 있는지 관련 단어를 조사
    • 질병 진단 기준과 관련해 어떤 식의 점수 책정 방법이나 조건 분기 규칙으로 진단되는지, 어떤 특징과의 조합이 고려되는지 조사
  4. 여러 변수를 조합하여 지수 작성
    • 신장이나 체중으로부터 BMI를 구하거나 기온 및 습도에서 불쾌지수를 구하는 등 여러 개의 변수를 조합한 지수를 작성하는 것도 유효할 수 있다.
  5. 자연 현상의 메커니즘에 주목
    • 강우량 예측처럼 그 대상이 자연 현상인 문제에서는 해당 분야의 도메인 지식으로 유효한 특징을 생성할 때가 많다.
  6. 경진 대회의 대상 서비스 이용
    • 경진 대회의 대상이 되는 서비스에 실제로 등록하거나 이용해보면 힌트를 얻을 수 있다

3.12 행 데이터의 관계성에 주목

각 행 데이터가 독립적이고 상호 관계를 특정하기 어려운 데이터가 있는 반면, 행 데이터끼리 일부 강한 관계성을 지니는 데이터도 있다. 만약 행 데이터 간에 일련의 관계성이 있다면 그에 주목하여 새로운 특징을 만들 수 있다.

3.12.3 상댓값에 주목

어떤 사용자의 값과 그 사용자가 속한 그룹의 평균값의 차이 또는 비율을 구하는 것처럼, 다른 값과 비교했을 때의 차이나 비율과 같은 상대값에 주목하는 것도 효과적이다.

3.12.4 위치 정보에 주목

위도나 경도 등의 위치 정보가 데이터에 포함될 경우 위치 간 거리를 특징으로 고려할 수 있다.

3.12.5 자연어 처리 기법

자연어 처리는 어간추출, 불용어, 표제어 추출등 특유의 전처리 방법이 존재하나 이 책에서는 다루지 않고 있다. 다음은 자연어 처리를 하기 위해 사용되는 기법이다.

  1. Bag-of-word(BoW)
    • 문장 등의 텍스트를 단어로 분할하고, 각 단어의 출현 수를 순서에 상관없이 단순하게 세는 방식이다.
    • 사이킷런 feature_extraction.text 모듈의 CountVectorizer에서 처리할 수 있다.
  2. N-gram
    • Bow에서 분할하는 단위를, 단어가 아닌 연속되는 단어 뭉치 단위로 끊는 방법이다.
    • 예를 들어 ‘This is a sentence’라는 문장에서 [this, is, a, sentence]라는 4개의 단어를 추출할 수 있지만 2-gram에서는 [This-is, is-a, a-sentence]라는 3개의 단어 뭉치를 추출한다.
    • 단어 분할에 비해 텍스트에 포함된 정보를 유지하기는 좋지만, 출현 가능한 종류의 수가 크게 늘어날 뿐만 아니라 희소 데이터가 된다.
  3. Tf-idf: BoW에서 작성한 단어-문서 카운트 행렬을 변환하는 기법이다.
  4. 단어 임베딩: 단어를 수치 벡터로 변환하는 방법을 단어 임베딩이라고 한다.

여기서 Tf-idf, N-gram 과 같이 자연어 처리에서 많이 사용되는 기법은 실제 자연어와 관계가 없는 데이터에도 적용할 수 있다. (3.12.6 장)

3.12.7 토픽 모델을 활용한 변주형 변수 변환

토픽 모델(topic model) 이라는 문서 분류 기법을 응용하여, 다른 범주형 변수와의 동시 출현 정보로부터 범주형 변수를 수치 벡터로 변환하는 방법이 있다. 두 범주형 변수 중 하나를 문서, 다른 하나를 단어로 간주해 각 문서에 각 단어가 몇 번 등장하는지 동시출현 정보를 이용해 단어-문서 카운트 행렬을 만들 수 있다. 여기에 잠재 디리클레 할당(LDA) 를 적용해 첫 번째 변수를 문서가 속한 토픽에 대한 확률을 나타내는 수치 벡터로 변환할 수 있다.

3.12.8 이미지 특징을 다루는 방법

이미지 데이터를 특징으로 만들 때는 이미지넷(ImageNet) 데이터로 학습한 신경망으로 이미지를 예측하고, 출력층에 가까운 층의 출력값을 특징으로 하는 방법을 사용한다. 또한 이미지의 메타 정보를 활용해 특징으로 삼을 수 있다.

3.12.9 결정 트리의 특징 변환

결정 트리를 작성한 뒤, 각 행 데이터가 분기에 따라 어느 잎 노드로 떨어지는지를 범주형 변수의 특징으로 만들어 다른 모델에 투입하는 독특한 기술이다.

3.12.10 익명화 데이터의 원래 값 추측

경진 대회에서는 주최자의 의향에 따라 각 변수의 의미가 숨겨져 있거나 또는 값에 표준화와 같은 처리를 가한 상태의 데이터를 제공할 때가 있다. 그러나 데이터를 주의 깊게 관찰하면 변환 전 원래의 값으로 되돌릴 수 있으므로 상황에 따라 변환하는 과정이 필요하다.

3.12.11 데이터 오류 수정

일부 데이터가 사용자나 데이터 작성자의 입력 오류로 인해 잘못되었다고 추측될 경우, 수정을 거치면서 품질이 더 좋은 데이터로 학습시킬 수 있다.

Comments