데이터 과학

연관 분석 활용

손으로 구한 값과 프로그램이 낸 값을 맞춰 봅니다.
그리고 프로그램이 걸러 주지 않는 것을 알게 됩니다.

학습 목표

  1. 항목 목록 형태의 데이터를 분석 도구가 읽을 수 있는 표로 바꿀 수 있다.
  2. 분석 도구로 연관 규칙을 찾아내고 손으로 구한 값과 비교해 확인할 수 있다.
  3. 최소 지지도와 최소 신뢰도를 바꾸며 규칙 수가 어떻게 달라지는지 설명할 수 있다.
  4. 도구가 걸러 주지 않는 것을 알고 결과를 스스로 판단할 수 있다.

손계산이 맞았는지 확인해 봅시다

이미 답을 아는 데이터로 도구를 배웁니다.

문제 상황

매점에서 무엇과 무엇이 함께 팔릴까요? 매점 영수증 열 장을 손으로 계산하면 규칙이 하나 나옵니다. 이번에는 같은 데이터를 분석 도구에 넣어 같은 답이 나오는지 확인합니다.

새 데이터를 쓰지 않는 데는 이유가 있습니다. 답을 모르는 데이터로 도구를 처음 써 보면 결과가 이상해도 도구를 잘못 쓴 것인지 데이터가 그런 것인지 알 수 없습니다. 답을 아는 데이터로 먼저 맞춰 보고 나서 새 데이터로 넘어가는 것이 순서입니다.

1

데이터 만들기 — 영수증을 표로 바꿔 저장한다

2

모델 만들기 — 연관 규칙을 찾는 위젯을 잇는다

3

분석 수행 — 나온 규칙을 읽고 판단한다

손으로 구한 답을 미리 적어 둡니다. 이온음료를 산 손님은 컵라면도 산다. 지지도 0.3, 향상도 2.0, 신뢰도 1.00. 이 세 숫자가 화면에 그대로 뜨면 제대로 한 것입니다.

실습 순서 1 — 영수증을 표로 바꿉니다

반듯한 표에 넣기 어려운 데이터를 넣는 방법이 있습니다.

영수증은 행마다 항목 수가 달라 그대로는 반듯한 표가 되지 않습니다. 그런데 스프레드시트도 분석 도구도 반듯한 표만 읽습니다. 해결책은 생각보다 단순합니다. 항목마다 열을 하나씩 만들고, 그 영수증에 있으면 1, 없으면 빈칸으로 둡니다.

우리가 읽던 모양

트랜잭션항목
T1삼각김밥, 우유
T2삼각김밥, 우유, 초콜릿
T3삼각김밥, 컵라면, 이온음료
T4삼각김밥, 초콜릿
T5삼각김밥, 컵라면
T6우유, 컵라면
T7우유, 초콜릿
T8컵라면, 이온음료
T9컵라면, 이온음료, 초콜릿
T10초콜릿

사람이 읽기 좋습니다. 하지만 둘째 칸의 길이가 제각각이라 프로그램은 어디까지가 한 항목인지 알 수 없습니다.

프로그램이 읽는 모양

삼각김밥우유컵라면초콜릿이온음료
11
111
111
… 열 줄

모든 행의 칸 수가 같아졌습니다. 항목마다 열이 정해져 있으니 프로그램이 열을 따라 내려가며 몇 번 나왔는지 셀 수 있습니다.

스프레드시트로 직접 만들기

  1. 첫 줄에 항목 이름 다섯 개를 나란히 적습니다. 이것이 열 이름이 됩니다.
  2. 둘째 줄부터 영수증 한 장에 한 줄씩, 그 영수증에 있는 항목 칸에만 1을 적습니다. 나머지는 손대지 않고 비워 둡니다.
  3. mart.csv처럼 csv 형식으로 저장합니다.

트랜잭션 번호 열은 넣지 않아도 됩니다. 영수증 번호는 줄 순서만으로 충분합니다. 굳이 남겼다면 File 위젯에서 그 열의 역할이 meta인지 확인합니다. 번호 열이 항목으로 잡히면 T1, T2…가 물건처럼 계산에 끼어듭니다.

빈칸에 0을 적으면 안 될까요?

오렌지에서는 결과가 달라집니다. 0을 적으면 「우유=0」, 곧 우유를 사지 않았다는 것까지 하나의 항목으로 세어 「우유를 사지 않은 손님은 이온음료도 사지 않는다」 같은 규칙이 쏟아집니다. 그래서 없는 것은 적지 않고 비워 둡니다. 게다가 마트라면 항목이 수만 가지인데 영수증 한 장에 담기는 물건은 그중 몇 개뿐이라, 0을 적는 방식이면 한 줄의 거의 모든 칸이 0이 됩니다. Data Table 위젯에서 열어 보면 빈칸이 물음표로 표시될 텐데, 고장이 아닙니다.

실습 순서 2 — 위젯을 준비합니다

이번에 쓸 위젯은 처음부터 들어 있지 않습니다.

먼저 애드온을 설치해야 합니다

File · Data Table 같은 위젯은 오렌지를 깔면 함께 들어옵니다. 그런데 연관 분석 위젯은 따로 내려받아야 합니다. Options 메뉴의 Add-ons를 열어 Associate를 찾아 설치하세요. 설치가 끝나면 오렌지를 껐다 켜야 새 위젯이 나타납니다. 왼쪽 위젯 목록에 Associate 묶음이 생기고 그 안에 Association Rules가 들어 있습니다.

학교 컴퓨터는 설치 권한이 막혀 있거나 인터넷이 느릴 수 있으니 수업 전에 미리 준비해 두는 편이 좋습니다.

File

csv를 연다

Data Table

제대로 들어왔는지 본다

Association Rules

규칙을 찾는다

설정 두 가지

설정 값 무엇을 정하는가
Min. supp. 20% 최소 지지도. 이만큼 자주 나오지 않는 조합은 아예 보지 않는다
Min. conf. 50% 최소 신뢰도. 선행을 산 손님 중 이만큼은 후행도 사야 규칙으로 인정한다

설정을 마치면 Find Rules 단추를 누릅니다. 백분율로 넣는다는 점에 주의하세요. 0.2가 아니라 20입니다.

실습 순서 3 — 나온 규칙을 읽습니다

네 줄이 나옵니다. 그중 쓸 만한 것은 한 짝의 두 방향뿐입니다.

결과 표에는 규칙마다 지지도(Supp) · 신뢰도(Conf) · 향상도(Lift)가 함께 나옵니다. 화면에는 「이온음료=1」처럼 항목 이름 뒤에 「=1」이 붙는데, 그 항목이 영수증에 있다는 뜻입니다. 신뢰도를 내림차순으로 정렬하면 이렇게 됩니다.

연관 규칙 지지도 신뢰도 향상도 읽는 법
이온음료 → 컵라면 0.31.002.0 쓸 만하다. 향상도가 1을 크게 넘는다
컵라면 → 이온음료 0.30.602.0 쓸 만하다. 같은 짝의 반대 방향
우유 → 삼각김밥 0.20.501.0 버린다. 향상도가 1이라 우연이다
우유 → 초콜릿 0.20.501.0 버린다. 향상도가 1이라 우연이다

손으로 구한 값과 같습니다

첫 줄의 0.3 · 1.00 · 2.0이 손으로 구한 값 그대로입니다. 둘째 줄의 0.60도 마찬가지고요. 도구는 우리가 한 계산을 빠르게 반복해 줄 뿐이라는 것이 이 한 줄로 확인됩니다.

그런데 왜 우연인 규칙까지 나올까요?

설정을 다시 보세요. 지지도와 신뢰도의 문턱만 정할 수 있었습니다. 향상도의 문턱을 정하는 칸은 없습니다. 그래서 도구는 지지도와 신뢰도만 통과하면 무조건 결과에 올립니다. 향상도가 1.0인 「우유 → 삼각김밥」이 버젓이 셋째 줄에 앉아 있는 이유입니다.

화면에 떴다고 다 규칙이 아닙니다. Lift 열을 직접 보고 1 언저리인 줄은 지워야 합니다. 도구가 하지 않는 이 마지막 걸러 내기가 사람의 몫입니다.

스스로 확인

지지도 문턱 20%를 넘는 짝은 다섯 가지입니다. 그런데 규칙은 네 줄만 나왔습니다. {삼각김밥, 컵라면}과 {삼각김밥, 초콜릿}은 어디로 갔을까요? 두 짝의 신뢰도를 떠올려 보세요.

문턱을 낮추면 어떻게 될까

규칙이 많아지는 것은 좋은 일일까요?

최소 지지도(Min. supp.)와 최소 신뢰도(Min. conf.)를 낮추고 Find Rules를 다시 눌러 보세요. 배선은 그대로 두고 숫자만 바꾸면 됩니다.

최소 지지도 최소 신뢰도 규칙 수 새로 늘어난 규칙은 어떤 것들인가
20%50%4기본 설정에서 나온 네 줄
10%50%11대부분 영수증 한 장에만 나온 조합
10%30%23향상도가 1보다 작은 것까지 섞여 든다

지지도 10%가 뜻하는 것

영수증이 열 장이니 10%는 딱 한 장입니다. 단 한 명의 손님이 그렇게 샀다는 것을 근거로 규칙을 만드는 셈입니다. 신뢰도가 1.00으로 나와도 「한 명이 그랬으니 100%」일 뿐입니다.

규칙이 많을수록 나쁜 이유

23개를 받아 들면 어느 것을 믿어야 할지 알 수 없습니다. 문턱은 일을 줄여 줄 뿐 아니라 믿을 수 없는 것을 미리 잘라 내는 구실도 합니다. 낮출수록 좋은 값이 아닙니다.

직접 실행해 보고 적어 봅시다

최소 지지도 최소 신뢰도 규칙 수 향상도가 1보다 큰 규칙 수
30%50%
20%50%
10%50%
10%30%

오른쪽 두 칸을 비교해 보세요. 규칙 수는 크게 늘어나는데 쓸 만한 규칙은 얼마나 늘어나나요?

우리 반 데이터로 해 봅시다

이제 답을 모르는 데이터로 넘어갑니다.

열 장짜리 예시로 방법을 익혔으니, 직접 모은 데이터로 해 볼 차례입니다. 아래 중 하나를 고르거나 비슷한 것을 스스로 정해 보세요. 「한 번에 함께 일어난 기록」이기만 하면 무엇이든 됩니다.

급식 잔반

한 사람이 남긴 반찬들을 한 묶음으로 봅니다. 함께 남는 반찬 짝을 찾으면 식단을 짤 때 참고할 수 있습니다.

동아리와 활동

한 학생이 드는 동아리와 참여하는 활동을 한 묶음으로 봅니다. 함께 신청되는 조합이 보이면 시간이 겹치지 않게 배치할 수 있습니다.

도서 대출

한 사람이 같은 날 빌린 책들을 한 묶음으로 봅니다. 함께 빌리는 갈래를 찾으면 서가 배치나 추천 목록에 쓸 수 있습니다.

친구들의 데이터를 모을 때

  • 이름을 적지 않습니다. 연관 분석에는 누구인지가 전혀 필요 없습니다. 한 줄이 한 사람이라는 것만 알면 됩니다.
  • 무엇에 쓸 것인지 미리 말하고 동의를 받습니다. 싫다는 사람을 넣지 않습니다.
  • 인원이 적으면 드문 조합 하나만 보고도 누구 것인지 짐작되는 일이 생깁니다. 결과만 공유하고 원자료는 남기지 않는 편이 낫습니다.

찾아낸 규칙을 적어 봅시다

연관 규칙 지지도 신뢰도 향상도 이 규칙으로 무엇을 하겠는가

마지막 칸이 가장 중요합니다. 「그래서 무엇을 하겠다」를 쓸 수 없는 규칙은 숫자가 아무리 좋아도 찾은 값어치가 없습니다.

스스로 확인

찾아낸 규칙 하나를 골라 「왜 이 둘이 함께 나타났을까」를 말해 보세요. 설명이 떠오르나요? 떠오르지 않는다면 그 규칙을 믿어도 될까요?

핵심 정리

데이터 준비

preparing the data

  • 항목마다 열 하나를 만들고 있으면 1, 없으면 빈칸
  • 이렇게 하면 행마다 칸 수가 같아진다
  • 트랜잭션 번호 열은 넣지 않거나 meta로 둔다. 없는 칸에 0을 적지 않는다

도구 쓰기

running the analysis

  • 연관 분석 위젯은 애드온을 따로 설치해야 나온다
  • 정할 수 있는 문턱은 지지도와 신뢰도 둘뿐
  • 손으로 구한 값과 똑같이 나오는지 먼저 확인한다

문턱 정하기

choosing thresholds

  • 낮출수록 규칙이 쏟아지지만 믿을 것은 늘지 않는다
  • 지지도 10%가 영수증 한 장이면 근거가 한 명이다
  • 문턱은 계산을 줄이고 믿을 수 없는 것을 잘라 낸다

결과 판단하기

judging the output

  • 화면에 떴다고 다 규칙이 아니다
  • Lift가 1 언저리인 줄은 사람이 지운다
  • 도구는 빨리 세어 줄 뿐이고, 어느 줄이 뜻있는지는 값이 어떻게 나왔는지 아는 사람이 판단한다
  • 「그래서 무엇을 하겠다」를 쓸 수 있어야 값어치가 있다

확인 퀴즈

배운 내용을 확인해 봅시다.

Q1

영수증 데이터를 분석 도구가 읽을 수 있는 표로 만드는 방법은?

Q2

트랜잭션 번호 열을 표에 남겼다면 File 위젯에서 그 열의 역할이 meta인지 확인해야 하는 까닭은?

Q3

결과 표에 향상도가 1.0인 규칙이 올라와 있습니다. 왜 그럴까?

Q4

영수증 10장을 분석하며 최소 지지도를 10%로 낮추면 어떤 문제가 생기나?

Q5

친구들에게 데이터를 모아 연관 분석을 할 때 지켜야 할 것은?