2022. 8. 28. 11:52ㆍ분석 Python/구현 및 자료
사람도 코드로 정렬한다면, 유니크한 코드로 구성할 수 있지만, 집단이나 특색을 표현하기 위해서는 몇 가지의 코드를 구성해서 사람들을 나누게 된다.
예를 들어 특정 사람에 대해서 속성을 만든다고 하면, 이 사람의 성별, 직업, 결혼 여부, 자녀 여부, 주택 여부 등 다양한 속성으로 사람들을 나눌 수 있다.
그렇다면 이것과 마찬가지로 특정 상품이 있다면 해당 상품을 특정 카테고리로 분류해야 사람들이 쉽게 볼 수 있을 것이다.
아래 그림처럼 특정 상품에 대해서 여러 개의 코드를 정해서 해당 상품을 표현하게 된다.
그리고 이러한 상품을 거래하게 되면 데이터베이스 같은 곳에서는 다음과 같이 적재될 것이다.
특정 상품을 고객이 사면 고객이 어떤 날짜에 어떤 제품을 샀는데, 이것에 해당하는 코드들은 적재될 것이다.
그렇다면 궁금한 점은 만약 저렇게 코드가 분명 정리가 되어있겠지만, 얻을 수 없다면, 해당 상품들은 어떤 코드로 이루어졌는 지를 어떻게 판단할까에서부터 고민을 하게 됐다.
만약 정확한 패턴을 알려주지 않는다면, 사람은 적재된 데이터에 의존할 수밖에 없다.
그러면 거래 내역에서 의심되는 코드들을 추리고, 그 코드들 내에서 패턴을 비교하면서 찾아야 할 것이다.
이 과정에서 많은 시행착오가 있을 것이고, 상당히 눈이 아픈 작업이 될 것이다.
그래서 드는 생각은 어차피 데이터 기반이면 알고리즘으로 할 수 있지 않을까라는 생각이 들었다.
물론 해당 패턴을 찾는 것도 데이터에 기반하는 것이다 보니 실제 결과와는 차이가 있을 수 있겠지만, 이러한 패턴을 어느 정도 만들면 담당자에게 물어봐서 수정할 수도 있을 것이다.
그래서 저걸 분리하는 입장에서 드는 생각은 트리 기반의 방식이 생각이 났다.
분류 알고리즘 중에서 decision tree가 있는데, 이진 분류로 각 node마다 특정 조건을 줘서 불순도를 측정하여 가장 최적의 분리 지점을 찾는 것이다.
하지만 내가 하려는 것은 이진 분류가 아닌, 전체 코드에서 패턴을 찾는 것이기 때문에, 한 속성당 한 번만 사용할 수 있고, 이진 분류가 아닌 다중 분류가 되는 형태가 필요했다.
그래서 속성을 최대 한 번씩만 사용해서 불순도를 0으로 만들 수 있다면, 해당 코드에 대한 매칭 되는 패턴을 찾을 수 있다는 가정하에 했다.
아래 그림처럼 코드들을 불순도를 기준으로 정제해볼 수 있다.
위에서 나온 결과 그림처럼 불순도를 기반으로 분류를 하다 보니, 실제와 완전 동일한 결과가 나오지 않을 수도 있지만, 이런 식으로 필터를 할 수 있다고 생각했다.
물론 100%가 아니라서 이런 작업이 쓸모없는 작업 일수도 있다는 것은 함정...
파이썬 코드 구현
## (작성중...)
'분석 Python > 구현 및 자료' 카테고리의 다른 글
Python) Data Drift 탐지 KS로 구현해보기 (0) | 2022.09.03 |
---|---|
Python) csv 파일을 parquet 파일로 만드는 방법 (0) | 2022.09.03 |
[Python] 이산화된 공간 안에 속하는 좌표 찾기 (0) | 2022.05.19 |
Python) list와 nested list안에 값을 기준으로 병합하는 코드 (2) | 2022.05.06 |
Python) 직선 기준 점 대칭 이동 구현 (0) | 2022.04.29 |