Lotto Data Analysis

미국에는 월마트 라는 대형 마트가 있다. 월마트에서 고객들이 구매한 물건을 찬찬히 살펴 보다 보니 기저귀를 사는 고객들은 맥주도 많이 산다는 경향이 크다는 것을 발견 하였다. 고객의 구매 패턴을 설명해 주는 이러한 정보를 바탕으로 월마트는 기저귀 옆에 맥주를 나란히 진열 해 놓아 매출을 상승시킨 일화가 있다.

이러한 장바구니 분석을 통해 매출을 상승 시킬 수 있는것을 알게 되었는데, 너도 나도 장바구니 분석을 통해 매출을 늘리고 싶을 것이다. 이러한 장바구니 분석을 사람이 직관적으로 경향성을 파악하는 것이 아닌 객관적인 수치( 통계 )를 활용한 방법을 설명하고자 한다.

예시를 통해 알아 보자. 동네 편의점의 매출이력 ( transaction )이 다음과 같다고 가정하자.

매출이력

출처 : 연관 규칙 분석

위의 표를 살펴보면, 1번 고객은 편의점에 들려 달걀, 라면, 참치캔을 구매했고 7번 고은 라면과 햇반을, 10번고객은 양파를 구매 하였다. 이 표를 통해 우리는 많은 규칙을 만들 수 있다. 1번 고객이 달걀, 라면, 참치캔을 구매 했기 때문에 달걀을 산 사람은 라면과 참치캔을 산다. 라는 규칙을 만들 수 있고, 또 9번고객은 달걀, 라면, 콜라를 샀기 때문에 라면은 산 사람은 콜라를 샀다는 규칙을 만들 수 있다.

하지만 이런 규칙들이 좋은, 즉 정말 현상을 잘 설명해줄 수 있는 규칙인지 통계적으로 확인 해 볼 필요가 있다. 이를 위해 세가지 통계적 지표, 용어를 설명하고자 한다.

먼저 용어부터 정의하면

  1. 조건절은 규칙에서 ‘만약 ~ 라면’에 해당하는 부분이다.

  2. 결과절은 규칙에서 그 뒷부분에 해당하는 내용이며

  3. 아이템 집합이란 조건절 또는 결과절을 구성하는 아이템들의 집합이다.

예를 통해 살펴보면, 달걀을 구매하는 사람들은 라면도 함께 산다라는 조건이 있을 때, 달걀을 구매한다면 이 조건절이되고, 라면 구매가 결과절이 되며, 각각의 아이템 집합은 달걀, 라면이 된다.

다음으로 통계적 지표를 설명하면

  1. 지지도 ( Support )란 조건절이 일어날 확률 ( 달걀을 구매할 확률 ).

  2. 신뢰도 ( Confidence )란 조건절이 주어 졌을 때, 결과절이 일어날 확률 ( 달걀을 구매 했을 때, 라면을 구매할 확률 ).

  3. 향상도 ( Lift )란 조건절이 주어 짐으로써 결과절이 일어날 확률을 결과절이 일어날 확률로 나눈 수치이다. 즉, 달걀을 구매 한 사람이 라면도 살 확률 / 임의의 고객이 라면을 살 확률 이다. 이 수치를 구하는 이유는 만약 결과절과 조건절이 독립적이라면 ( 서로 연관성이 없다면 ) 달걀을 구매한것이 라면을 사는것에 영향을 줄 수 없으므로 달걀 구매 한 사람이 라면도 살 확률 = 임의의 고객이 라면을 살 확률이 된다. 따라서 향상도는 1이된다. 그리고, 향상도가 1보다 크다면, 달걀을 구매 한 사람이 라면도 살 확률 > 임의의 고객이 라면을 살 확률이 되는데, 이는 달걀 구매가 라면 구매에 영향을 끼친다고 말할 수 있는 증거가 된다.

정리하자면, 향상도가 1인 경우엔 조건절과 결과절이 서로 영향을 주지 않는다고 말 할 수 있고, 1보다 큰 경우엔 조건절이 결과절에 영향을 끼친다는 것을 확인 할 수 있다 ( 값이 더 크면 클수록 영향을 많이 끼친다고 할 수 있겠다. ).

즉, 좋은 규칙은 조건절이 결과절에 영향을 끼친다는 것을 잘 설명하는 규칙이므로 지지도, 신뢰도, 향상도 모두 높은 수치가 나와야 좋은, 설명력 있는 규칙이라고 할 수 있겠다.

이 개념을 바탕으로 실제 로또 번호를 R을 통해 분석 해 보았다. 만약 로또 번호들 사이에 연관 규칙이 존재한다면 번호를 찍을 때 당첨 확률을 높일 수 있을 것이라는 생각에 분석을 시작 하였다. 예를들어 연관분석을 통해 19번,32번,39번이 당첨번호로 나왔을 때 44번도 나온다는 규칙이 설명력 있는 규칙으로 나온다면 19,32,39번을 표기할 때 44번도 표기하면 로또에 당첨될 확률이 다른 번호를 찍는 것보다 높아질 것이라 기대 할 수 있다.

사실 로또는 강력한 규칙은 나오지 않아야 한다고 생각한다. 당첨 번호들 간에 강력한 연관관계가 있다는 것은 로또 당첨 번호를 뽑는 것이 우연이 아닌 어떤 다른 요인이 작용 한다고 생각 할 수 있기 때문이다. 즉 로또는 랜덤하게 뽑혀야 하기 때문에, 변수들간에 종속성이 있으면 안되는데 ( 독립적이어야 하는데 ) 강력한 연관관계, 규칙이 나와버리면 변수들 간의 독립성이 의심 될 수 있는 여지가 내포되어 있다고생각한다.

여튼 이런점이 궁금하여 직접 해보았다. 원 데이터는 보너스 번호를 뺀 당첨번호 6개를 수집하였으며 대상은 로또 추첨 1회 ~ 840회 ( 2019.01.05 )을 대상으로 수집 된 데이터이다. R코드와 결과는 다음과 같다. ( 코드를 따로 설명하지는 않겠다. )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

library(arules)

library(arulesViz)

df <- read.csv("test1.csv")

df <- as.data.frame(sapply(df,as.logical))

str(df)

df.trans <- as(df,"transactions")

df.trans

summary(df.trans)

library(arules)

library(arulesViz)

df <- read.csv("test1.csv")

df <- as.data.frame(sapply(df,as.logical))

str(df)

df.trans <- as(df,"transactions")

df.trans

summary(df.trans)

사진 1

< 사진 1 >
1
2
3
4
5
6
7
8
9
10
11
12
13
apriori(df.trans, parameter=list(support=0.1, confidence=0.8, minlen=1, maxlen=6, smax=1))

ecl <- eclat(df.trans, parameter=list(support=2/840,minlen=1,maxlen=6))

ecl

inspect(sort(ecl[1:50]))

rule <- apriori(df.trans, parameter=list(support=0.002, confidence=0.8, minlen=1, maxlen=6, smax=1))

summary(rule)

inspect(sort(rule[1:20],by='lift'))

사진 2

< 사진 2 >

사진 1의 결과를 보면, 로또 번호 ( 1번 ~ 45번 ) 까지 가장 많이 나온 번호 ( 34번, 27번, 40번, 12번, 20번 순서대로, 밑은 840회 동안 나온 횟수 )가 표기되어 있다. 수학적으로 840회 동안 한 번호가 나오는 기댓값을 계산 했을때 약 112회 ( 119.99999 … ) 다. 34번을 보면 112회보다 약 19회 더 자주 나왔다.

사진 2는 나온 조건들을 lift가 높은 순서대로 20개를 추려 정리 한 결과이다. 결과를 보면, lhs가 조건절, rhs가 결과절이고 support가 지지도이며, confidence가 신뢰도이고 lift가 향상도이다.

가장 lift가 높은 첫번쨰 규칙을 해석하자면, 7번 23번 28번이 당첨 번호로 불렸을 때 9번이 다음에 나온다 라는 것이고, 그 밑은 18,23,35번이 당첨 번호로 불렸을 때 9번이 그다음에 나온다 라는 것이다.

즉 7,23,28번을 로또 용지에 마킹 할 때 7,23,28번이 다 이번 추첨에서 나올꺼야 라는 확신이 있다면 9번을 추가적으로 마킹해도 좋다. 이때까지 통계적으로 7,23,28번이 나왔을 때 9번은 반드시 나왔으니까. ( 신뢰도 1 ) 마찬가지로 18,23,35번이 반드시 이번 추첨에서 나온다고 생각한다면 9번을 또 마킹해도 좋다, 이때까진 항상 나왔다.

또한 1번 규칙의 support가 0.00238 정도로 나와 있는데, 이는 당첨번호중 3개를 맞춰 5등 ( 당첨금액 5천원 ) 을 할 수학적 확률 ( 계산했을때 대략 0.00222 )보다 약간, 대략 0.016%정도 높은 확률이다. 즉, 통계적으로 7,23,28번을 찍어 5등( 번호 3개 일치 )을 할 확률이 5등을 할 수학적인 확률보다 매우 약간 높다고 생각 할 수 있다. 사실 기대한 것 보다 큰 의미는 없어보이긴 한다.

재미삼아, 호기심 해소용으로 진행 해 보았는데, 어느정도 연관 규칙들이 도출 되어서 신기하긴 하다. 물론 기껏해야 번호 2,3,4개에 대한 규칙밖에 도출되지 않아 6개를 모두 맞추어야 하는 1등까지 가긴 힘들고, 매우 미미한 정도의 규칙 들이지만 그래도 다음번에 로또를 살 땐 어느정도 참고 해서 사볼것이다.