Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기

2,063 views

Published on

서울 코엑스에서 진행된 파이콘 한국 2018에서 8월 19일에 발표한 내용입니다.
데이터 전처리와 Feature Engineering에 대해 다룹니다.

[파이콘 한국 2018 프로그램 | 땀내를 줄이는 Data와 Feature 다루기](https://www.pycon.kr/2018/program/47)

이 발표내용은 8월 17일 금요일에 진행되었던 다음 2개의 튜토리얼을 바탕으로 작성되었습니다.

* [공공데이터로 파이썬 데이터 분석 입문하기(3시간) — 파이콘 한국 2018](https://www.pycon.kr/2018/program/tutorial/6)
* [청와대 국민청원 데이터로 파이썬 자연어처리 입문하기(3시간) — 파이콘 한국 2018](https://www.pycon.kr/2018/program/tutorial/7)

Published in: Data & Analytics
  • Be the first to comment

[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기

  1. 1. 땀내를 줄이는 Data와 Feature 다루기 박조은 (joeunpark@gmail.com)
  2. 2. 두 아이의 엄마 파이썬을 쓰는 개발자
  3. 3. 땀내나는 이야기 수학과 통계를 잘 모르는 개발자의 이야기
  4. 4. 땀내를 줄여보고자 했으나... 도메인이나 상황에 따라 처리해야 하는 뾰족한 방법을 찾기 어려움
  5. 5. 망했어요...
  6. 6. 응답 수 Cleaning the data 20 Cleaning 20 Dirty data 16 Data Cleaning 14 dirty data 10 Data cleaning 10 Size 9 Missing data 8 Incomplete data 8 cleaning 8 Lack of documentation 7 data quality 6 Kaggle Servey 2017PersonalProjectsChallenge
  7. 7. Kaggle Servey 2017PersonalProjectsChallenge
  8. 8. 발표에서 다루는 내용 •Data Preprocessing •Feature Engineering
  9. 9. Import 이 발표자료 안에 있는 코드는 대부분 다음의 라이브러리로 작성되었습니다. import pandas as pd import numpy as np import sklearn import plotnine
  10. 10. plotnine 발표자료 안에 있는 그래프는 대부분 파이썬에서 R의 ggplot 문법을 사용할 수 있는 plotnine으로 작성되었습니다. 이미치 출처 : https://www.kaggle.com/residentmario/grammar-of-graphics-with-plotnine-optional
  11. 11. Machine Learning Pipeline Data Retrieval Data Preprocessing Feature Extraction Feature Transform & Scaling Feature Selection modeling Predicthyperparameter tuning Evaluation Feature Engineering
  12. 12. hyperparameter tuning Machine Learning Pipeline Data Retrieval Data Preprocessing modeling Predict Evaluation Feature Extraction Feature Transform & Scaling Feature Selection Feature Engineering
  13. 13. 우리가 쓰려는 데이터
  14. 14. 여행사에서 활용한 데이터라고 해서 다운로드 받았는데 .hwp 해외 여행자 휴대품 통관규정 최종 수정일은 지금으로부터 5년전
  15. 15. 상가업소정보라고 해서 다운로드 받았는데 여긴 어디?
  16. 16. 지역별 3.3㎡당 평균 분양가격 컬럼명이 어디에?이 데이터를 쓰려면? 엑셀에서 열면 잘 정리되어 있긴 한데... 파이썬으로는? NaN의 향연...
  17. 17. 수십년간의 분양가격을 보고 싶은데...
  18. 18. 대부분의 데이터는 우리가 원하는 대로 되어있지 않음
  19. 19. Data & Feature
  20. 20. Data 우리에게 던져진 날것의 무엇
  21. 21. Feature 신호와 소음
  22. 22. Data merge & concat
  23. 23. 데이터를 얻었지만 원하는 형태의 데이터가 아닐 수도 있습니다.
  24. 24. 병합할 수 있는 형태로 만들어주기 • 전국 신규 아파트 분양가격 동향 2015-2018
  25. 25. • 전국 신규 아파트 분양가격 동향 2013-2015 병합할 수 있는 형태로 만들어주기
  26. 26. 병합할 수 있는 형태로 만들어주기 • 땀내나는 전처리 • 컬럼 값을 만들어 주고 필요없는 데이터는 제거
  27. 27. •melt로 tidy data만들기 병합할 수 있는 형태로 만들어주기
  28. 28. • 필요한 데이터를 모아 concat 으로 병합하기 병합할 수 있는 형태로 만들어주기
  29. 29. 데이터 보기
  30. 30. 데이터의 일부 보기 head(), tail()
  31. 31. 데이터 미리보기 • head()나 tail() 로 데이터의 일부분을 미리 보기
  32. 32. 데이터 형태 혹은 요약보기 info(), describe(), dtypes()
  33. 33. 데이터 형태 보기 • 데이터 형태에 따라 시각화와 데이터 처리가 달라짐
  34. 34. •수치형과 범주형 데이터의 차이 데이터 형태에 따라 다른 표현
  35. 35. 데이터 요약 보기 • 데이터의 형태에 따라 다른 요약
  36. 36. Missing Data 다루기 Drop & Imputation
  37. 37. •수집이 안 됨 (예. 설문의 무응답, 서버오류) •해당 로그 수집을 특정 시기 이후에 시작해서 그 전 데이터 가 없음(예. DB Table 컬럼 추가) •특정 상황에서는 필요없어 일부러 남기지 않음 •Human error 결측치는 왜 생길까?
  38. 38. 결측치
  39. 39. Missingno 결측치의 패턴을 시각화
  40. 40. 랜덤하게 있음 VS 랜덤하지 않음 의도된 결측치 VS 의도치 않은 결측치 결측치
  41. 41. 1) MCAR 완전무작위 결측 발생, Missing completely at random 2) MAR 임의적 결측 발생, Missing at random 3) NI 무시할 수 없는 결측 발생, Non-ignorable 예. 설문이라면 응답하고 싶지 않은 데이터에 대한 의도적 결측치 결측치 종류
  42. 42. 1) 완전제거법(List-wise deletion) •가장 보편적으로 사용되는 방법 •결측율이 높을 때 정보의 손실 •각 변수의 분산을 증가하게 하는 비효율적인 방법 2) 단일대체방법(Single Imputation) •다양성을 반영하지 못함 •관측된 자료에 의존하는 문제 •구간을 나누어 구간별 평균/중앙값/최빈값을 구해서 대체 3) 다중대체방법 (Multiple Imputation) •결측이 완전 무작위로 발생한다는 가정 •대체가 가능한 값들의 분포로 부터 추출된 값으로 대체한 완전한 데이터세트를 만들어 대체 결측치 처리 방법
  43. 43. 제거하기 VS 대체하기
  44. 44. Drop
  45. 45. 결측치 제거하기 • 대체하기 어렵거나 결측비율이 높은 데이터 • 대체할 필요가 없는 데이터
  46. 46. Imputation
  47. 47. • 평균값 • 중앙값 • 최빈값 • 확률분포 활용 • 내외부 데이터 활용 통계적 접근으로 대체하기
  48. 48. 무작위로 누락된 수치형 데이터 •평균값 아웃라이어 데이터로 편향이 발생할 수 있음 다른 유사한 데이터의 평균값을 구해서 채워준다. dataset['Age'].fillna(dataset['Age'].mean(), inplace = True)
  49. 49. 무작위로 누락된 수치형 데이터 •중앙값 숫자이지만 카테고리 형태를 가질 때 이상치(Outlier Value)가 있을 때 데이터가 짝수개일 때 없는 데이터가 생길 수 있는 문제 예) 월급의 평균값을 사용하면 이상치로 중앙값보다 높은 값이 채워질 수 있음 dataset['Age'].fillna(dataset['Age'].median(), inplace = True)
  50. 50. 무작위로 누락된 수치형 데이터 •최빈값 무작위로 누락된 범주형 데이터 dataset['Age'].fillna(dataset['Age'].mode()[0], inplace = True)
  51. 51. scikit-learn Imputer 평균값, 중앙값, 최빈값으로 결측치를 채워줌
  52. 52. 전국 도시공원 표준 데이터에서의 결측치 처리의 예  → 도로명 주소의 결측치를 지번주소로 대체 다른 컬럼의 값을 사용
  53. 53. 결측치여부로 데이터 나누기 Feature 만들기 test/train set 나누기 test/train set 합치기 예측값으로 대체 기계학습을 활용 학습시키기 예측하기 예측 데이터 반영하기
  54. 54. 사례. 국민청원 데이터에서 기타로 입력된 값을 다른 값으로 대체 해주면 카테고리를 더 잘 예측할 것 같다는 가설 을 세우고기타 카테고리를 예측해서 대체 예측해서 대체하기
  55. 55. 결과는 또르륵...T_T 국민청원 입력시 기타로 분류 값을 지정한 이유가 있었음 샘플 데이터로 학습해서 충분히 학습되지 않음(Underfitting)
  56. 56. 1.데이터 전처리 2.기타 청원과 아닌 것 나누기 A.단어 벡터화(BOW, TF-IDF) B.기타 청원 분류하기(RF) 3.예측값을 category_pred 컬럼에 넣어주기 4.학습세트와 테스트세트를 7:3으로 임의로 나누기 5.분류기 설정하기(RF, XGB) 6.분류기로 학습시키기(RF, XGB) 7.label 데이터를 예측한 category_pred 를 사용하기 8.학습의 정확도 보기(RF, XGB) 9.테스트 데이터 예측하기(RF, XGB) 10.실제 데이터와 예측결과의 차이를 보기(RF, XGB) 국민청원 ‘기타’카테고리 예측 예시
  57. 57. Feature Engineering
  58. 58. hyperparameter tuning Machine Learning Pipeline Data Retrieval Data Preprocessing modeling Predict Evaluation Feature Extraction Feature Transform & Scaling Feature Selection Feature Engineering
  59. 59. 1. Brainstorming or Testing features; 2. Deciding what features to create; 3. Creating features; 4. Checking how the features work with your model; 5. Improving your features if needed; 6. Go back to brainstorming/creating more features until the work is done. 출처 : https://en.wikipedia.org/wiki/Feature_engineering The process of feature engineering
  60. 60. 범주형 데이터 다루기 one-hot-vector, binning, bucketing
  61. 61. One-Hot-(Vector|Encoding) 수치형 ↕ binning(bucketing) 범주형
  62. 62. One-Hot-(Vector|Encoding) 언어 파이썬 루비 자바 파이썬 언어 언어_파이썬 언어_루비 언어_자바 파이썬 1 0 0 루비 0 1 0 자바 0 0 1 파이썬 1 0 0 텍스트 데이터, 범주형 데이터 → 수치형 데이터 •머신러닝이나 딥러닝 알고리즘은 수치로된 데이터만 이해 •벡터에서 해당되는 하나의 데이터만 1로 변경해 주고 나머지는 0으로 채워주는 것
  63. 63. scikit-learn LabelEncoder •범주형 데이터 → 수치형 데이터
  64. 64. 수치형 데이터 다루기 연속형 vs 비연속형
  65. 65. 연속형 데이터 binning(bucketing) •수치형 데이터 → 범주(카테고리) 형태의 데이터 •나누는 기준을 임의로 정하기 때문에 논리적 타당성이 필요 •일반적인 기준에 따라 정하는 것이 비판의 여지가 줄어든다.
  66. 66. 연속형 데이터 binning(bucketing)
  67. 67. 비연속형 데이터 수치형 데이터 → 카테고리 형태의 데이터
  68. 68. 텍스트 데이터 다루기 자연어처리, 텍스트 데이터 벡터화
  69. 69. •가장 간단하지만 효과적이라 널리쓰이는 방법 •장, 문단, 문장, 서식과 같은 입력 텍스트의 구조를 제외하고 각 단어가 이 말뭉치에 얼마나 많이 나타나는지만 헤아림 •구조와 상관없이 단어의 출현횟수만 세기 때문에 텍스트를 담는 가방(bag)으로 생각할 수 있음 BOW(bag of words)
  70. 70. BOW(bag of words) •BOW는 단어의 순서가 완전히 무시 된다는 단점 •예를 들어 의미가 완전히 반대인 두 문장을 보자 •it's bad, not good at all. •it's good, not bad at all. •위 두 문장은 의미가 전혀 반대지만 완전히 동일하게 반환 •이를 보완하기 위해 n-gram을 사용하는 데 • BOW는 하나의 토큰을 사용하지만 • n-gram은 n개의 토큰을 사용
  71. 71. (1) 파이콘에 버스를 타고 갔다. (2) 파이콘에서 발표를 했다. (3) 파이콘에서 자원봉사를 했다.토큰화 [ "파이콘에", "파이콘에서", "버스를", "발표를", "자원봉사를", "타고", "갔다", "했다" ] 벡터화 (1) [1, 0, 1, 0, 0, 1, 1, 0] (2) [0, 1, 0, 1, 0, 0, 0, 1] (3) [0, 1, 0, 0, 1, 0, 0, 1] BOW(bag of words)
  72. 72. uni-gram [ "파이콘에", "버스를" “타고", "갔다", ] n-gram파이콘에 버스를 타고 갔다. bi-gram [ "파이콘에 버스를", "버스를 타고", "타고 갔다" ] tri-gram [ "파이콘에 버스를 타고", "버스를 타고 갔다" ] bi-gram(1,2) [ "파이콘에", "버스를", "타고갔다", "파이콘에 버스를", "버스를 타고", "타고 갔다" ] tri-gram(2,3) [ "파이콘에 버스를", "버스를 타고", "타고 갔다”, "파이콘에 버스를 타고", "버스를 타고 갔다" ]
  73. 73. Feature Extraction
  74. 74. Raw data로 부터 Feature 추출
  75. 75. Bag Of Wordstri-gram을 사용하고 BOW를 생성해 준 예시
  76. 76. TF-IDFTerm frequency Inverse document frequency TF(단어 빈도, term frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지를 나타내는 값 이 값이 높을수록 문서에서 중요하다고 생각할 수 있지만 단어 자체가 문서군 내에서 자주 사용되는 경우, 이것은 그 단어가 흔하게 등장한다는 것을 의미 이것을 DF(문서 빈도, document frequency)라고 하며, 이 값의 역수를 IDF(역문서 빈도, inverse document frequency)라고함 TF-IDF는 TF와 IDF를 곱한 값
  77. 77. TF-IDFTerm frequency Inverse document frequency 예를 들어 청와대 국민청원 데이터에서 초등 돌봄 교실이라는 단어는 특정 청원에서는 자주 등장하지만 전체 청원에서는 자주 등장하지 않음 이럴 때 해당 문서에서 초등 돌봄 교실이라는 단어는 중요한 역할을 하 기 때문에 다른 단어보다 가중치를 높게 설정 반면, 안녕하세요. 청원합니다. 등의 단어는 매우 자주 등장하기 때문에 가중치를 낮게 설정
  78. 78. BOW에 TF-IDF 가중치를 적용한 예
  79. 79. Error Data 다루기
  80. 80. Error Data - 잘못된 위경도 정보가 입력되어 범위를 벗어난 사례 - 같은 데이터에 들어 있는 주소 정보로 위경도를 보정 오류 데이터의 경우 참고 할 수 있는 다른 Data가 있다면 보정 예. 급여정보가 없을 때 보험료를 참고해서 급여를 예측
  81. 81. Outlier Data 다루기
  82. 82. 이상치 Outlier Data 다루기 •Error Data와는 다름 •데이터 혹은 샘플에서 동떨어진 값으로 모델에 편향을 줄 수 있음 •정상치와 이상치의 기준을 어느 지점으로 할 것인지에 대한 모호함 •도메인마다 이상치의 기준에 대한 정도가 다름 예) 의료 데이터는 이상치가 중요할 수도 있음 예) 국민청원 데이터로 투표수를 예측한다고 할 때 특정 사회적 이슈에 따라 이상치가 발생
  83. 83. 이상치로 인한 회귀선 변화 예. 기사에 나오는 평균 연봉은 내 연봉보다 높음
  84. 84. •보정 •제거 •대체 •스케일 줄이기 이상치 Outlier Data 다루기
  85. 85. Feature Selection
  86. 86. 적절한 Feature Selection 만으로도 좋은 성능을 낼 수 있음
  87. 87. Pandas 를 통한 Feature Selection
  88. 88. •원본 데이터에서 불필요한 Feature 제거 •필요한 Feature만 선택하기 Scikit-learn 을 통한 Feature Selection >>> from sklearn.feature_selection import VarianceThreshold >>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]] >>> sel = VarianceThreshold(threshold=(.8 * (1 - .8))) >>> sel.fit_transform(X) array([[0, 1], [1, 0], [0, 0], [1, 1], [1, 0], [1, 1]]) 출처 : http://scikit-learn.org/stable/modules/feature_selection.html
  89. 89. FeatureTransform
  90. 90. •일변량 비선형 변환 •대부분의 모델은 각 특성이 정규분포 와 비슷할 때 좋은 성능 •오차가 정규분포를 따른 다는 가정하 에 정규분포로 만들어 주는 과정이 필 요해서 로그변환 •로그함수의 값을 복원할 때는 지수함 수를 사용 np.exp(log_feature) •정수형 특성에 주로 사용 •정수 Label Data에도 적용해 볼 수 있음 Univariate transformation
  91. 91. Feature Scaling
  92. 92. •어느 한 변수가 분산이 너무 클 때 •각 변수의 분포를 일정하게 유지하도록 •회귀분석에는 스케일링을 적용하든 안 하든 변수의 유의성은 달라지지 않음 Feature Scaling
  93. 93. 출처 : http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html MinMax Scaling • 어느 한 변수가 분산이 너무 클 때 • 평균을 0 분산을 1로 만들어줌
  94. 94. 차원의 저주 Curse of dimensionality
  95. 95. 차원 축소 •데이터를 잘 설명할 수 있는 잠재공간 찾기 •일정한 차원을 넘어가면 계속 성능이 떨어지는 현상이 발생 •작은 공간에 과적합 현상이 생겨 예측 성능이 떨어지는 것을 방지 •데이터 압축, 시각화에 사용
  96. 96. http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html PCA • PCA를 활용한 Feature Scaling 의 예
  97. 97. t-SNE로 N차원의 데이터를 2차원으로 변환
  98. 98. t-SNE로 N차원의 데이터를 2차원으로 변환
  99. 99. word2vec 벡터를 2차원으로 축소해 시각화 한 예
  100. 100. Feature Pipeline
  101. 101. Text Vectorization polynomial feature PCA / t-SNE Cleaning / Imputation / Encoding Preprocessing Feature Extractions Feature Scaling & Selection Machine Learning Model
  102. 102. Feature Pipeline 단어 벡터화 두 가지를 함께 수행하도록
  103. 103. multiprocessing
  104. 104. top -o cpu 내 장비의 자원이 충분히 활용되고 있는지 확인 내 장비는 제대로 일하고 있을까?
  105. 105. 자원을 최대한 사용하도록 일 시키기 from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': with Pool(5) as p: print(p.map(f, [1, 2, 3])) 출처 : https://docs.python.org/3.6/library/multiprocessing.html?module-multiprocessing
  106. 106. 내 장비는 제대로 일하고 있을까?
  107. 107. xgb.XGBClassifier(nthread=-1) RandomForestRegressor(n_jobs=-1) 자원을 최대한 사용하도록 일 시키기
  108. 108. Underfitting & Overfitting 신호와 소음
  109. 109. 출처 : http://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting.html Underfitting & Overfitting
  110. 110. Underfitting & Overfitting
  111. 111. 최적의 학습지점 찾기
  112. 112. 청와대 국민청원 자연어 처리와 분석 https://github.com/corazzon/petitionWrangling 공공데이터 분석 https://github.com/corazzon/OpenDataWrangling 캐글 경진대회 https://github.com/corazzon/KaggleStruggle 발표에 사용된 노트북
  113. 113. 감사합니다.

×