티스토리 뷰

 

 

🎈 여는 글

  언젠가부터 블로그에 글을 적는 일이 뜸해지기 시작했다. 바쁘기도 바빴지만, 방문 기록이나 인기 글과 같은 지표에 신경을 쓰기 시작하면서부터 포스팅이 점점 부담스러워지기 시작했다. 이 블로그를 주로 방문하는 사람들은 Verilog나 Digital 회로 설계 등에 관심이 있을 거라는 생각 때문에, 내가 올리고 싶은 글보다는 남이 찾아주는 글을 올려야 한다는 부담감이었을 지도 모른다. 아시다시피 이 블로그는 상업적인 이득을 취하기 위한 곳도 아니고, 애드센스와 같은 수익형 모델도 달려있지 않다. 그저 내가 원할 때 글을 쓸 수 있는 공간이었는데, 꼭 정보를 전달해야 한다는 마음에 주객전도가 되어버렸다. 다시 초심으로 돌아가서 그냥 내가 올리고 싶은 내용이라면 반응을 고려하지 않고 올려보려고 한다. 순수하게 글을 쓴다는 즐거움을 다시 찾고, 방문해주시는 분들이 무엇 하나라도 얻어간다면 그걸로 만족하려고 한다.

 

  지난 Tape-out이 끝나고, 코칭 스터디가 다시 시작된다는 공지를 보고 냉큼 신청을 하였다. 주제는 데이터 사이언스 관련 내용이었는데, 예전에도 데이터 사이언스 주제로 스터디를 참여 했었으나 이번에는 프로젝트 위주로 진행된다는 소식에 한 치에 망설임도 없이 신청서를 넣었다. 내가 하고 있는 연구와 100% 일치한다고 볼 수는 없으나, 또 완전히 무관하다고 볼 수도 없는 분야였다. 시간이 조금이라도 여유 있는 지금이 수업을 듣기에 가장 좋은 시기라고 생각되었다. 

 

 

이번에 열렸던 데이터 사이언스 프로젝트 2024

 

 


 

🎈 코칭스터디는 무엇인가요?

  코칭스터디는 네이버 부스트코스와 모두의 연구소에서 함께 운영하는 스터디 프로그램이다. 네이버 부스트코스는 대학원을 준비하던 2년 전부터 유용하게 활용한 사이트인데, 무료로 양질의 강의를 볼 수 있으며, 소스가 대부분 공개되어 있기 때문에 실습이나 프로젝트도 경험해 볼 수 있다. 부스트코스와 모두의 연구소에서는 주기적으로 코칭스터디를 여는데, 나는 지금까지 다섯 번 정도 참여했었다. 딥러닝의 '딥' 자도 모르던 꼬꼬마 시절, 스터디를 통해 좋은 인연도 많이 만났고, 처음 시작했을 때에는 부스터(조원)로 시작했지만 직전 과정부터는 리드부스터(조장)로 참여하였다. 

 

  코칭스터디는 플립러닝을 기본으로 하는데, 플립러닝이란 자기 주도적 학습의 일종으로 예비 학습을 통해 미리 공부를 하고, 실제 수업 시간에는 서로 질문을 하거나 토론 및 실습을 통해 깊은 학습을 할 수 있는 학습법이다. 개인적으로 강의를 단순히 듣는 것은 공부 효율이 매우 낮다고 생각하는 사람이기에, 이러한 방식이 나에게 매우 잘 맞았다. 백지장도 맞들면 낫다라는 말처럼, 혼자 하는 공부보다는 함께 하는 공부가 더 재미있고 능률도 높다.

 

 

거꾸로 학습법!

 

 

  스터디가 열릴 때마다 주제가 바뀌기도하고 중복된 주제로 열리기도 한다. 이번에는 프로젝트로 배우는 데이터사이언스라는 주제로 강의가 개설되었다. 강사는 데이터 사이언스 분야에서는 모르는 사람이 없는 '오늘코드'의 박조은 강사님이었으며, 강사님의 실습 동영상이 제공되고 실습도 함께 할 수 있도록 Jupyter notebook 기반의 코드도 함께 제공된다.

 

  스터디는 매주 조별로 진행하는 미션이 주어지며, 미션을 수행하면서 어려운 점이 있으면 조별로 배정된 코치님께 질문을 할 수도 있다. 매주 목요일에는 라이브 강의가 진행되며, 미션에 대한 자세한 풀이 및 우수 미션에 대한 소개와 라이브코치님에게 궁금한 점을 슬랙에 올리면, 라이브로 소통하면서 답을 해주신다.

 

 

슬랙을 통해 조원들과 미션을 진행한 내용

 

 

  운영자 분들도 여러 스터디를 통해 쌓인 노하우를 기반으로, 참여자들이 학습에 불편함을 느끼지 않도록 빠르게 피드백을  주시며, 스터디가 단순 학습뿐 아니라 네트워킹의 기회가 될 수 있도록 많은 노력을 하시는 모습이 인상 깊었다. 코칭스터디를 수료하면 수료증이 발급되고, 부스터에게는 풀잎스쿨 수강료 50% 할인, 리드부스터에게는 100% 할인이라는 혜택이 주어진다. 

 

  풀잎스쿨🍀은 플립러닝을 본인이 원하는 주제로 스터디를 개설할 수도 있고, 혹은 다른 사람이 열어 둔 스터디를 찾아서 참여할 수도 있는 주도적 학습을 돕는 플랫폼이다. 모두의 연구소 사이트 내에 스터디가 개설되며, 나는 지금까지 총 5회 참여하였다.

 

 

다양한 주제의 스터디를 참여하였다.

 

 


 

🎈 데이터 사이언스에 대하여

  이번에 열렸던 스터디를 통해 EDA (Exploratory Data Analysis, 탐색적 데이터 분석)에 대한 기초적인 개념부터 활용까지 프로젝트 기반으로 경험해 볼 수 있었다. 데이터는 머신러닝과 딥러닝을 위한 학습 및 분석의 재료라고 볼 수 있는데, 단순히 제공된 데이터를 바로 사용해서는 원하는 결과를 얻을 수 없다. 대부분의 경우에는 전처리 과정을 통해 머신이 제대로 이해할 수 있는 형태로 재가공하는 과정이 반드시 필요하다.

 

  이때, 여러 가지 통계적 분석을 사용하여 각 feature 간의 관계를 파악하고, 내가 수행하려는 목적에 부합한 지에 따라서 데이터를 제거하기도 하고, 새로운 파생 변수를 만들기도 한다. 이 과정에서 여러 시각화 라이브러리를 사용하여 사람이 파악할 수 있는 형태로 시각화하여 분석하는 과정이 필요하다. 또한, Feature enginering을 통해 범주형 데이터를 수치형으로 바꾸거나 one hot encoding이나 number encoding과 같은 데이터 포맷 변경 과정을 거치기도 한다. 데이터의 분포를 scaling 하거나 결측치를 평균값이나 중앙값으로 대체하는 일을 수행 하였으며, GridSearchCV나 RandomSearchCV 등의 탐색 방법을 통해 여러 알고리즘 중에 최적의 하이퍼 파라미터를 탐색하여 정확도를 올리는 작업도 진행해야 한다.

 

 

EDA의 전반적인 과정

 

  데이터 사이언스에 대한 관심이 높아지면서, 데이터 분석을 위한 kaggle이나 데이콘 등의 대회 사이트를 활용하는 경우가 더욱 많아지고 있으며, 이 곳에서 다른 사람들이 이미 올려둔 프로젝트나 jupyter notebook 등을 참고하는 것도 공부에 많은 도움이 된다.

 

🎈 이번 스터디를 통해 얻은 것

- EDA 과정을 통해 feature enginerring 하는 방법
- feature간 분석을 통해 수행하는 전처리 과정
- seaborn, matplotlib 등을 활용한 통계 분석 및 시각화 방법
- make_column_transformer를 사용하여 one hot encoding 시, 자동으로 칼럼명 생성하는 방법

 

 

  데이터 전처리 중에 머신러닝 알고리즘을 사용하기 위해서는 데이터 형태를 범주형에서 수치형으로 바꿔야 한다. 이때, 칼럼마다 이름을 각각 생성하여, 조건을 달아주는 일은 매우 번거로운 작업이다. 이를 사이킷런 라이브러리에서 제공하는 함수를 사용하여 쉽고 편하게 달성하는 방법이 있어 이곳에 공유하려고 한다. 이 내용 또한 코칭스터디 라이브 강사셨던 박조은 코치님께서 수업 중에 강력 추천해주신 방법이다. :)

 

🏴 기존 방식

df["Age_low"] = df["Age"] < 30
df["Age_middle"] = (df["Age"] >= 30) & (df["Age"] <= 60)
df["Age_high"] = df["Age"] > 60
df[["Age", "Age_low", "Age_middle", "Age_high"]].head()

 

🏁 편한 방식 - 자동

from sklearn.compose import make_column_transformer
from sklearn.compose import make_column_selector
from sklearn.preprocessing import OneHotEncoder

ct = make_column_transformer(
    (OneHotEncoder(handle_unknown="ignore", sparse=False),
    make_column_selector(dtype_include="object")),
    remainder='passthrough'
)

X_train_ohe = ct.fit_transform(X_train)
X_test_ohe = ct.transform(X_test)

feature_names = ct.get_feature_names_out()
feature_names_simple = [name.split('__')[1] for name in feature_names]

 

댓글
공지사항