본문 바로가기

Challenge/엘리스 AI 트랙 2기

엘리스 AI 트랙 2기 - 13주차 모히또 레이서의 학습일지

728x90
반응형

 

 

가랏! 데분츄! 코딩박치기!

 

 

13주 차는 12주 차 때 배운 데이터 분석에 필요한 다양한 라이브러리의 메서드를 포켓몬 데이터셋에 적용한 실습을 시작하였다.

 

이번 프로젝트는 '탐색적 데이터 분석(EDA)'을 중점으로 진행하였다.

 


 

탐색적 데이터 분석이란?

데이터 분석 단계에 해당하며 데이터 분포 확인, 변수간 관계 파악을 통해 전체 데이터의 특징을 발견하고, 이해할 수 있는 분석 방법. 쉽게 얘기하자면 수치화 된 어떤 하나의 데이터에서 그 데이터가 가지고 있은 본질적인 의미를 파악하는 기법이라고 할 수 있다.  

 


 

본격적으로 포켓몬 데이터셋을 이용하기 전에 포켓몬이 무엇인지 알아보자! (포켓몬 조아!

 

 

 

이 실습의 문제는 다음과 같다.

 

"일반 포켓몬과 전설 포켓몬이 혼합되어 있는 데이터 셋에서 데이터의 속성만을 보고 전설 포켓몬을 골라낼 수 있을까?"

 


 

 

데이터셋은 캐글에서 가져왔다.

 

Pokemon with stats

721 Pokemon with stats and types

www.kaggle.com

 

 

해당 데이터셋의 설명이 담긴 Description을 읽어보면 다음과 같이 나와있다.

 

 


 

 

우선 우리의 목적인 전설 포켓몬을 데이터 셋에서 분리해보자.

 

# Legendary 컬럼 값이 True 인 경우 legendary 변수에 저장하기
legendary = pkemon[pkemon["Legendary"] == True].reset_index(drop=True)

# 데이터프레임의 크기를 확인합니다.
print(legendary.shape)

 

legendary 변수에 전설의 포켓몬을 따로 담아 놓고, shape를 사용해서 크기를 확인하니 (65, 13)이라는 값이 나왔다. 

전체 800마리의 포켓몬 중에 전설의 포켓몬은 65마리 밖에 존재하지 않는 다는 것이다.

 

이를 또 비율로 나타내면 (65/800)*100 = 8.125%이다.

 

전설의 포켓몬은 닉값하는 것 처럼, 매우 적은 비율로 섞여있는 걸 알 수 있다.

 

이제 전설의 포켓몬이 어느정도 있는지 확인했으니 본격적으로 우리의 목적인 '데이터의 속성만을 보고 전설 포켓몬을 골라내기' 시작해보자.

 

엘리스 실습에서는 여러가지 방법으로 보았지만 여기서는 딱 2가지의 경우만 간략하게 살펴볼 것이다.

 

1. 이름 컬럼의 값으로 일반 포켓몬과 전설 포켓몬 구분하기

2. 각 포켓몬이 가지고 있는 속성으로 일반 포켓몬과 전설 포켓몬 구분하기 

 


 

'이름 컬럼의 값으로 일반 포켓몬과 전설 포켓몬 구분하기'

 

우선 name컬럼의 데이터 값을 countplot을 통해 시각화 해보았는데

title이 Legendary(전설 포켓몬)인 그래프에서 전설의 포켓몬의 이름의 길이가 Ordinary(일반 포켓몬)보다 긴 값들이 많은 걸 쉽게 확인 할 수 있다.

 

 


'각 포켓몬이 가지고 있는 속성으로 일반 포켓몬과 전설 포켓몬 구분하기' 

 

속성은 'Type1'이라는 컬럼에 저장되어있다.

 

그래서 우선 컬럼에 저장되어 있는 값들을 전부 출력해서 전체적인 속성의 종류를 파악해보자.

 

# 모든 타입을 types 변수에 저장
types = list(pkemon["Type 1"].unique())
print(len(types))
print(types)

 

위의 코드를 실행하니 속성 값은 총 18개가 있었고 각 속성의 종류는 다음과 같다.

['Grass', 'Fire', 'Water', 'Bug', 'Normal', 'Poison', 'Electric', 'Ground', 'Fairy', 'Fighting', 'Psychic', 'Rock', 'Ghost', 'Ice', 'Dragon', 'Dark', 'Steel', 'Flying']

 

대부분은 포켓몬 이러한 속성을 하나씩 가지고 있지만, 속성을 두 개 가진(Type2의 컬럼의 값이 Nan이 아닌) 포켓몬이 있다.

 

그렇다면 직관적으로 생각할 때, 속성을 2개 모두 가지고 있을 때 전설 포켓몬일 확률이 높지 않을까?라는 생각이 든다.

 

직접 확인해보자.

 

# 일반 포켓몬 개수 : 735
print(len(ordinary))
display(ordinary["Type 2"].notnull().sum(), ordinary["Type 2"].isna().sum())

 

일반 포켓몬의 전체 개수는 '735'이고 display로 속성이 두 개인 일반 포켓몬을 출력하면 374의 값을 얻을 수 있고, 반대로 속성이 하나인(Type2의 컬럼의 값이 Nan인) 일반 포켓몬의 개수를 출력하면 361의 값을 얻을 수 있다.

 

이를 비율로 나타내자. 

속성이 하나인 일반 몬스터:  (361 / 735) * 100 = 49.116

속성이 두 개인 일반 몬스터:  (374 / 735) * 100 = 50.884

 

 

전설 포켓몬의 경우는?

 

# 전설 포켓몬 개수 : 65
print(len(legendary))
display(legendary["Type 2"].notnull().sum(), legendary["Type 2"].isna().sum())

 

전설 포켓몬의 개수는 '65'이고 속성이 두 개인 전설 포켓몬의 개수는 40, 한 개인 개수는 25이다.

 

비율로 나타내면

속성이 하나인 전설 몬스터: (25 / 65) * 100 = 38.46

속성이 두 개인 전설 몬스터: (40 / 65) * 100 = 61.54

 

 

 

이를 통해 알 수 있듯이, 단순히 속성의 값을 두 개나 가지고 있다고 해도 높은 비율로 그 포켓몬이 전설 포켓몬이라고 확신할 수는 없는 걸 알 수 있다. 다만 전설 포켓몬 전체의 비율 중에서  속성이 하나인 포켓몬 보다 두개인 포켓몬이 보다 높은 비율로 존재 한다는 것을 확인 할 수 있다.

 

 


 

(머신 = 기계) + (러닝 = 배우는 것) => 기계 배우는 것..?

 

 

 

데이터 분석을 마치고 본격적으로 간단(?)하게 머신러닝도 배웠다.

 

 

나는 머신러닝 및 인공지능이란 말이 알파고가 유행하면서 번진 용어인줄 알았는데 사실 역사가 깊은 친구였다는 걸 알고 좀 놀랐다. 1956년도 부터에 '인간처럼 생각하는 기계'라는 의미의 인공지능이라는 용어가 사용되었다고 한다. 그 후 냉각기를 거치고 인터넷이 발달하면서 다시 주목받고 있다고 한다.

 

 


 

 

 

머신러닝 접근 방법

 

 

1. 어떤 문제가 있는지 문제파악

 

2. 모델을 학습 시킴

 

3. 모델에 대한 평가

 

4. 모델이 좋으면 서비스에 도입 그렇지 않다면 에러 확인 후 문제에 반영 

 

5. 전통적인 방식과 다르게 데이터 업데이트가 가능

 

* 전통적인 접근 방식과 머신러닝 접근 방식엔 큰 차이점이 2가지 있다. 그것은 데이터 업데이트와 자동화

 

 


 

 

머신러닝의 업무 프로세스는 다음과 같다.

 

 

1. 문제 파악 및 문제 정의 -> 2. 데이터 준비 -> 3.모델 구축 및 분석 -> 4. 결과 공유 -> 5. 모니터링

 

 


 

 

머신러닝을 위한 데이터 과학자의 도구 

 

Excel 엑셀, 파이썬, R 등등

 

 

 


 

 

머신 러닝을 위한 핵심 개념

 

1. Data

 

데이터는 다음 세 가지 요소를 포함한다. (객관화된 사실, 데이터 자체에는 직접적인 의미가 없음, 실세계를 표현)

 

2. Feature

 

Feature는 data를 컴퓨터가 이해할 수 있도록 수치(numeric) 또는 디지털(digitized)로 표현/표상(representation)한 것

 

*Feature의 타입은 크게 두 가지로 나눌 수 있다. Categorical(범주형), Numeric(수치형)

 

3. Target

 

예측하려는 목표

 

4. Model

 

실제의 무엇을 더 작게 추상화된 형태로 표현한것; 모형 또는 본보기라고 할 수 있다.

 

5. Machine Learning Model

 

어떠한 문제를 해결하기 위해 수립한 가설을 논리적, 수학적 함수식의 형태로 표현한 것

 

6. Algorithm

 

입력된 자료를 바탕으로 원하는 결과를 유도하기 위해 일련의 논리적인 순서와 절차를 규칙화한 것

 

7. Machine Learning Algorithm

 

Model이 어떠한 문제를 해결하기 위한 함수식이라면 Algorithm은 그 함수식을 만들어내는 일련의 절차, 규칙

 

8. Loss, Cost, Error

 

예측 목표로부터 예측 결과의 오차

 

9. Learning

 

예측 목표로부터 예측 결과의 오차를 최소화하는 함수식을 찾아내는 과정

 

10. Supervised Learning

 

지도학습

 

11. Unsupervised Learning

 

비지도 학습

 

 


13주 차 학습을 통해

 

 

 13주차에서는 포켓몬의 데이터 셋을 이용한 데이터 분석부터 시작해 머신러닝, 도커를 이용한 배포까지의 학습을 마쳤다. 부끄러운 얘기지만 엘리스에서 본격적으로 데이터 분석을 배우기 전에는 나는 그래프도 잘 읽지 못하는 사람이었고 아예 관심 조차 없었다. 하지만 저번주의 타이타닉 데이터 분석부터 시작해 흥미로운 포켓몬 데이터 분석을 통해서 그냥 이렇게 수치화로만 설정된 데이터에서도 그 나름의 이야기가 있고 흥미로운 점들이 많다는 것을 느꼈다. 아직 내 실력은 초보 수준이지만, 이번 실습들을 통해 점점 데이터 분석에 흥미가 붙고 있다.

728x90
반응형