7강 / 20강

순위로 바꾸기 — 눈금을 버리고 순서만 남긴다

copula transform, 아라크네의 조용한 전처리

순위로 바꾸기 — 눈금을 버리고 순서만 남긴다
값을 버리고 몇 번째인가만 남기면, 유전자마다 제각각이던 눈금이 하나로 통일됩니다.

5강과 6강의 코드에 계속 등장한 rank_transform 을 이제 설명할 차례입니다. 하는 일은 한 줄로 끝납니다.

발현량 → 그 유전자 안에서 몇 번째로 큰가 → 0~1 로 환산

200명 중 가장 낮은 사람은 0.0025, 가장 높은 사람은 0.9975. 값이 6.31 이었든 12000 이었든 상관없이 순서만 남습니다. 통계학에서는 이것을 copula 변환이라고 부릅니다.

왜 굳이 이런 짓을 할까요? 얻는 것이 셋 있습니다.

① 칸이 공평해진다

순위는 0~1 에 완벽하게 고르게 퍼져 있습니다. 7칸으로 자르면 칸마다 정확히 약 28~29명이 들어가요. 원래 값으로 자르면 가운데 칸에 100명, 끝 칸에 2명이 되기 쉽습니다.

등빈도 칸 = 추정이 안정적
② 눈금이 상관없어진다

CPM 이든 TPM 이든, log 를 씌웠든 안 씌웠든 순서는 같습니다. 그러니 MI 도 같습니다. 전처리 방식이 결과를 흔들지 않아요.

2강의 그 이야기
③ 이상치가 힘을 잃는다

한 사람의 값이 실수로 1000배 크게 찍혀도, 순위로는 그냥 1등일 뿐입니다. 상관계수라면 그 한 점이 r 을 통째로 끌고 갑니다.

튼튼함(robustness)
argsort 를 두 번 쓰는 것과 같은 관용구입니다. 칸마다 28~29명씩 정확히 나뉩니다.
Python 브라우저에서 실행
순서를 바꾸지 않는 변환에는 MI 가 꿈쩍도 하지 않습니다. 반면 상관계수는 이상치 하나에 무너집니다.
Python 브라우저에서 실행

🎮 원래 값 ↔ 순위, 같은 자료를 두 눈으로

왼쪽은 원래 발현량, 오른쪽은 순위로 바꾼 것입니다. 격자를 켜 보면 순위 쪽은 칸마다 점 수가 같아지는 것이 보입니다.

순위 변환 실험실 — 눈금을 버리면 무엇이 남을까
불러오는 중…
동점(tie) 처리는 순위 기반 방법의 공통 약점입니다. 전처리에서 미리 막는 것이 정석입니다.
Python 브라우저에서 실행
🤔 확인 문제
순위 변환을 하면 MI 계산에서 무엇이 좋아질까요?
🤔 확인 문제
한 샘플의 발현량이 실수로 1000배 크게 기록되었습니다. 순위 변환 뒤 MI 는?
🤔 확인 문제
순위 변환으로 잃는 정보는 무엇일까요?