파이썬/NIPA 데이터분석 강의

NIPA 온라인선택 데이터 머신러닝 01 머신러닝과 과학 이해하기

mcdn 2020. 10. 4. 12:47
반응형

01 머신러닝과 데이터 과학 이해하기

시작!

페이팔(핀테크 회사)에서 사기 탐지 시스템을 만듬 

기술통계 (현상 발생에 대해 사실적 기술) -> 분석(원인 찾기) -> 예측(미래 방향) -> 의사결정 지원 (단순히 예측이 아니라 행동 결정지원)

 

 데이터과학은 단일한 학문이라기 보다 통계나 패션인식 ai 데이터베이스 등 다양한 학문들이 얽혀있는 융복합 학문으로 불리고 있다. 얽혀있다보니 a라는 개념은 다른데에서 b'로 불리기도 하고 공유하는 것도 많고.. 

데이터 과학 영역에서 융합형 인재를 원하게 되었다. 

더 나은 의사결정은 더 나은 수익, 비즈니스을 위함 

우리 수업도 비즈니스 도메인의 관점에서 진행할 예정 

이제 머신러닝 배울 예정. 

세 관점이 전통적으로 존재. 

상관관계를 찾는게 빅데이터가 크다. 대머리가 늘어나니까 세일즈가 는다 ㅋㅋㅋㅋ

까마귀가 날자 배가 떨어진다.. 이런 상관관계에 의존해서 의사결정하는게 특이 

통계분석은 모형이 얼마나 실제 세계에 부합하는지, 통계치, 수치 등을 통해 확인한다. 그래서 모형이 유효한지 그게 중요함. 적은데이터를 통해 하기 때문에 모형이 중요하다.  

머신러닝은 예측과 패턴분석. 많은 데이터가 필요하고 그것으로 모형을 만든다. 

 

머신러닝은 컴퓨터가 데이터로부터 스스로 학습을 할 수 있도록 프로그래밍하는 과학적 활동. 

머신러닝은 가설 검증이 중요. 머신러닝은 자동화된 시스템, 어떤 학습을 하기 위해 과거 데이터를 사용하고 계속 퍼포먼스 성능을 늘리는... 스팸필터, OCC 글씨 분석 등은 머신러닝의 대표적 예다.

발전할 수 있는 배경에는 1. 데이터가 많아짐 2. 컴퓨터의 하드웨어가 발전해 기반이 된 점 3. 알고리즘 개선 -> 그래서 머신러닝을 사용할 수 있게됨. 

문제파악 : 예를 들어 이메일 서비스에 스팸을 분류하는 시스템이 필요했다. 

규칙작성 : 광고라는 키워드를 확인해서 그 키워드가 들어있는 애를 스팸이라 본다 

평가 : 실제로 걸러주는지 확인 / 만약 에러가 있다.. 스팸메일은 그 키워드를 그대로 쓰지 않는다는 점을 파악 

-> 키워드 추가 

그리고 다시 평가 해서 과정 주기적으로 거치게 된다. 

머신러닝 역시 마찬가지다. 

가장 큰 차이점은 새 데이터, 알 수 없는 패턴이 생겼을 때 일련의 자동화된 과정이 되면서 모델이 알아서 패턴을 찾아가게 된다. 

자 이제 타이타닉 예제로 실습을 해볼 예정이다. 

 

타이타닉의 생존자는 누구일까?

이번 실습에서는 타이타닉호의 생존자 데이터 표본으로부터

탑승자의 생존 여부를 판별하는 규칙(Rule) 을 만들어볼 것입니다.

직접 규칙을 만들어보면서 전통적인 방법으로 생존자를 찾아내는 문제를 해결해보도록 하겠습니다.

타이타닉 생존자 데이터는 초심자들이 머신러닝 work flow를 이해하는데 많이 다루어지는 유명한 데이터입니다.

데이터의 수도 많지 않고 데이터가 다양한 데이터 포맷을 담고 있어서 다루기에도 좋습니다.

머신러닝 프로젝트를 진행할 때 데이터에 대한 이해가 높을수록 좋은 결과를 만들어낼 수 있습니다.

이러한 이유로 첫 실습에서는 가벼운 마음으로 타이타닉 데이터를 사용하도록 하겠습니다.

실습 순서

  1. 생존자를 찾는 규칙을 만든다
  2. 작성한 규칙을 이용해서 생존자를 판별한다
  3. 규칙의 정확도를 분석한다
타이타닉 데이터
survived	pclass	name	sex	age	sibsp	parch	ticket	fare	cabin	embarked
1	2	“Brown, Miss. Amelia “”Mildred”””	female	24.0	0	0	248733	13.0	F33	S
0	2	Chapman, Mr. Charles Henry	male	52.0	0	0	248731	13.5	NaN	S
1	1	Fortune, Miss. Mabel Helen	female	23.0	3	2	19950	263.0	C23 C25 C27	S
0	3	Lievens, Mr. Rene Aime	male	24.0	0	0	345781	9.5	NaN	S
1	3	Baclini, Miss. Helene Barbara	female	0.75	2	1	2666	19.2583	NaN	C
0	3	Henry, Miss. Delia	female	NaN	0	0	382649	7.75	NaN	Q
0	3	Hart, Mr. Henry	male	NaN	0	0	394140	6.8583	NaN	Q
1	1	Bidois, Miss. Rosalie	female	42.0	0	0	PC 17757	227.525	NaN	C
1	1	Daniel, Mr. Robert Williams	male	27.0	0	0	113804	30.5	NaN	S
1	1	Anderson, Mr. Harry	male	48.0	0	0	19952	26.55	E12	S
0	3	Skoog, Miss. Margit Elizabeth	female	2.0	3	2	347088	27.9	NaN	S
0	3	Burke, Mr. Jeremiah	male	19.0	0	0	365222	6.75	NaN	Q
컬럼명	설명
pclass	좌석 클래스. 1(1등석), 2(2등석), 3(3등석)
survived	생존 여부. 1(생존), 0(사망)
name	이름
sex	성별. female(여성), male(남성)
age	나이
sibsp	함께 탑승한 형제 또는 배우자의 수
parch	함께 탑승한 부모 또는 자녀의 수
ticket	티켓 번호
fare	티켓 요금
cabin	선실 번호
embarked	탑승한 곳. C(Cherbourg), Q(Queenstown), S(Southampton)

샘플 규칙

  1. sex male?
    • No: survived
  2. sex male & age<=9.5?
    • No: survived
  3. sex male & age<=9.5 & sibsp > 2.5?
    • No: survived
    • Yes: died
  1. 오른쪽 화면에 정답을 입력한 빈 리스트가 있습니다.answer = [ ]Copy
  2. 2. 오른쪽 화면의 answer 리스트 안에 순서대로 테스트 데이터의 탑승자 10명의 생존여부를 입력해주세요answer = [1, 0, 0, 0, 1, 0, 1, 0, 0, 1]Copy
  3. 3. 탑승자 10명에 대해서  입력해야 합니다. 입력한 후에는 왼쪽 아래 버튼을 눌러 결과를 확인합니다.
from titanic import *

def is_survived_or_died():
	
	# 아래에 순서 대로 탑승자 10명의 생존여부를 입력해주세요 (생존:1, 죽음:0)
	# Example: answer = [1, 0, 0, 0, 1, 0, 1, 0, 0, 1]
	#answer = [1, 0,0,0,1,0,1,0,0,1 ]
    answer = [0,1,1,1,0,1,0,0,1,0]
    scoring(answer)

if __name__ == "__main__":
    is_survived_or_died()

처음에 주어진 answer케이스로 하니까 9개가 틀림

그말은 즉 1 0 을 틀린거 만큼 뒤집으면 된다 

테스트 한 규칙의 정확도: 9 점 생존자로 잘못 판별된 case는 [8] 번째 case입니다.

테스트 한 규칙의 정확도: 10 점 생존자로 잘못 판별된 case는 [] 번째 case입니다.

성공!

def scoring(answer):
    result = resulting(answer)
    accuracy(result)
    wrong_case(result)
    
def resulting(answer):
    solution = [0, 1, 1, 1, 0, 1, 0, 0, 1, 0]
    result = {'right': [], 'wrong': []}
    for i, (a, s) in enumerate(zip(answer, solution)):
        if a == s:
            result['right'].append(i+1)
        else:
            result['wrong'].append(i+1)
    return result

def accuracy(result):
    acc = len(result['right'])
    print('테스트 한 규칙의 정확도: {} 점'.format(acc))

def wrong_case(result):
    print('생존자로 잘못 판별된 case는 {} 번째 case입니다.'.format(result['wrong']))

 다른 타이타닉 py 파일. 

scoring(answer) 함수가 여기에 있네 

 

반응형