SK네트웍스 Family AI 캠프 1기 4주차 회고
SK Networks AI Camp
Weekly 회고 - 4주차
포스트를 읽기 전에..
이 포스트는 SK네트웍스 Family AI 캠프를 다니면서 느낀 개인적인 생각을 정리한 포스트입니다.
배운 내용이나 스킬셋에 대한 설명은 별도로 작성하지 않았기 때문에, 그에 대한 정보는 다른 포스트를 참고해주세요!
Liked
5월의 마지막 주 회고록입니다! 이번 주의 가장 좋았던 점은 캠프에서 처음 프로젝트를 진행했다는 점입니다. 캠프에 참여하게 된 계기 중 한가지가 “팀으로 진행하는 프로젝트 경험을 하고 싶다” 라는 것이었는데 실제로 경험해보게 되어서 좋았습니다. 저를 포함한 저희 팀이 진행한 프로젝트 주제는 “통합 FAQ 조회 시스템”입니다. 프로젝트 진행 과정 및 결과는 월말 회고록에 보다 자세히 다루도록 하겠습니다!
프로젝트를 진행하면서 팀별로 회의를 진행하고 문제점을 해결하며 스스로 부족한 부분이 어떤 것이고 어떻게 보완할 지 고민해볼 수 있는 기회가 되어 만족스러웠습니다.
다음 좋았던 점은 데이터분석에 대해 배웠다는 점입니다. 머신러닝 및 딥러닝은 어떤 데이터를 가지고 원하는 결과를 도출하도록 해야하는 경우가 많기 때문에, 데이터에 대한 이해와 데이터를 다루는 방법을 잘 알고 있어야 합니다. 그런 의미에서 머신러닝 파트에 들어가기 전, 이번 주에 데이터분석 파트를 공부하게 된 것이 좋았던 점이라고 생각해서 좋았던 점에 적어보았습니다. 이번 주 배운 데이터분석에 관한 지식이 다음에 배우게 될 머신러닝 및 딥러닝 공부에 큰 도움이 될 것이라고 확신합니다!
Learned
이번 주에 주로 진행한 내용은 파이썬의 데이터 관련 모듈인 “pandas”에 대한 것입니다. 캠프에 참여하기 전에 이미 “pandas”를 사용해본 경험이 있어서 기초적인 사용법 및 메서드를 익히는 데 어려움은 없었습니다. 하지만 제가 이전에 사용해보지 못했던 함수를 몇 가지 발견해서 그에 대해 정리하고자 합니다.
첫 번째는 apply, applymap, pipe의 차이점에 대한 것입니다. 이전엔 앞의 세 가지 함수 중에서 apply만 사용해보았는데 비슷한 용도의 두 가지 함수를 발견하였습니다. 세 가지 모두 시리즈 또는 데이터프레임의 각 요소에 어떤 연산을 한 후에 반환을 해주는 함수입니다. 하지만 세부적으로 보면 조금씩 다른 것을 확인할 수 있는데, 그 내용은 아래와 같습니다.
INPUT TYPE | FUNCTION | RETURN VALUE |
---|---|---|
시리즈 원소 | apply | 단일 값 또는 시리즈 |
시리즈 객체 | apply | 단일 값 또는 시리즈 또는 데이터프레임 |
데이터프레임 원소 | applymap | 데이터프레임 |
데이터프레임 객체 | pipe | 단일 값 또는 시리즈 또는 데이터프레임 |
표를 통해 확인할 수 있듯, 어떤 연산을 하고 값을 반환해준다는 점은 같지만 어떤 타입에 연산을 적용할 지, 어떤 값으로 반환하길 원하는지에 따라 사용하는 함수가 다르다는 것을 알 수 있습니다. 일반적인 상황에선 apply가 사용되는 것으로 알고있지만 데이터프레임에 함수를 적용해야한다면 반환가능한 형태가 많은 pipe의 사용도 고려해볼만 할 것입니다.
그리고 또 다른 파이썬 모듈인 “scikit-learn”을 이용하여 간단한 머신러닝을 구현하는 방법을 배웠습니다. 이 또한 캠프 참여 이전에 컴퓨터 비전 공부를 하며 사용해본 적이 있었기 때문에 강의를 듣는 데에 어려움은 없었습니다. 그렇게 어려운 내용은 없었지만 배운 것을 적어두어야 어떤 것을 배웠는지 기억할 수 있기 때문에, 개인적으로 가장 중요하다고 생각되는 “encoding”에 대해 간단히 정리하고자 합니다.
One-hot encoding이란 문자열 형태로 된 범주형 인덱스를 기계가 이해할 수 있는 숫자 형태로 바꿔주는 변환 방법 중 하나입니다.
ID | APPLE | BANANA | MELON |
---|---|---|---|
1 | 1 | 0 | 0 |
2 | 0 | 1 | 0 |
3 | 0 | 0 | 1 |
One-hot encoding은 위와 같은 형태로 각각의 범주형 인덱스를 0과 1로 구성된 벡터로 표현하는 것입니다. 위와 같이 표현하면 각 인덱스가 새로운 변수로 표현이 가능해지고, 숫자의 크고 작은 특성을 없앨 수 있다는 장점이 있습니다. 하지만 범주형 인덱스가 너무 많은 경우엔 각각의 인덱스마다 새로운 벡터가 생성되기 때문에 메모리 효율이 좋지 않다는 단점 또한 존재합니다.
이런 단점을 극복하는 다른 방법인 “label encoding” 또한 존재합니다.
Label encoding이란 범주형 인덱스를 알파벳 순으로 정렬하고, 그 순서대로 번호를 매기는 방법입니다.
BEFORE ENCODING | AFTER ENCODING |
---|---|
Apple | 0 |
BANANA | 1 |
MELON | 2 |
위와 같이 Label encoding은 단순히 범주형 인덱스를 숫자 형태로 변환하는 것이기 때문에 메모리 효율이 좋다고 할 수 있습니다. 하지만, 숫자로 변환하는 과정에서 기존 범주형 인덱스에선 존재하지 않았던 순서나 랭크 정보가 모델에 잘못 반영될 수 있다는 단점이 존재합니다. 이처럼 각각의 Encoding은 각자의 장단점의 존재하므로 사용하는 데이터의 특성을 고려하여 어떤 방법을 사용할 지 판단해야합니다.
Lacked
이번 주에 스스로 느낀 부족한 점은 “강의에 집중하지 못했다는 점”입니다. 이번 주에 주로 다뤘던 “pandas”나 머신러닝 기초에 대한 내용을 캠프에 참여하기 전, 이미 공부해보았기에 집중해서 들어야겠다는 생각을 하지 않았던 것이 요인이라고 생각합니다. 지난 회고록에서도 언급했듯이 다 안다고 생각했던 부분에서도 모르는 것이 한 두개쯤 있었는데, 회고록을 쓰면서 이번주 내용들을 돌아보니 위에서 적었던 것 같이 몰랐던 부분이 또 등장했습니다. 항상 회고록을 적으면서 모르고 지나갔던 부분을 깨닫게 되는 것 같습니다. 혼자 공부했다면 회고록을 적지 않았을 것이기 때문에, 분명 모르고 지나쳤을텐데.. 이런 것이 회고록을 적는 장점이라고 생각합니다!
Longed for
이번 주 뿐만 아니라 앞으로도 계속 스스로에게 바라는 점인데, 스스로 새로운 뭔가 배우려고 노력하면 좋겠다는 것입니다. 얼마 전, 갑자기Docker와 kubernetes에 대해 관심이 생겨서 새로 공부해야겠다고 다짐했습니다. 뭔가 처음 배운다는 것은 누구든 어려운 일이겠지만, 미래의 제가 그 때까지 포기하지않고 공부를 이어나가서 새로운 기술 스택을 하나라도 더 늘렸으면 좋겠다는 바람이 있습니다. 그러기 위해선 육체적 건강은 물론이고, 정신적으로도 건강해야될 것입니다.
제가 설정한 목표를 이룰 수 있도록 강한 몸과 강인한 정신이 저에게 깃들길 바랍니다.
맺음말
평일 내내 캠프에서 공부하고 주말에 회고록을 쓰며, 부족한 개인 공부를 하다보니 어느 새 5월이 마무리되었네요. 집 - 운동 - 캠프 생활만 하다보니 시간이 언제 이렇게 지났는지 모를 정도로 정신이 없었던 한 달인 것 같습니다. 처음 시작할 땐 하루 이틀.. 정말 시간 안간다고 생각했었는데 돌이켜보니 시간이 너무 빠르게 흐름에 눈물이 흐릅니다.
5월 한 달동안 스스로 많은 일을 해낼 수 있을줄 알았는데 생각보다 저는 그렇게 열심히 살지 못했던 것 같습니다. 그렇다고 포기한다는 건 절대 아니고! 6월은 지금보다 열심히 살겠다는 다짐입니다. 저를 지켜봐주세요.
스스로 과거를 돌이켜봤을 때, 스스로 열심히 살았다는 생각이 들 수 있는 사람이 되길 기원합니다. 남은 기간도 화이팅합시다!