๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Machine Learning/Statistics

Wilcoxon rank sum test (์œŒ์ฝ•์Šจ ์ˆœ์œ„ ํ•ฉ ๊ฒ€์ •)

by ISLA! 2024. 5. 20.

๐ŸŽฏ ์œŒ์ฝ•์Šจ ์ˆœ์œ„ ํ•ฉ ๊ฒ€์ •

  • ์œŒ์ฝ•์Šจ ์ˆœ์œ„ํ•ฉ ๊ฒ€์ •(์ข…์ข… ์œŒ์ฝ•์Šจ ๋งจ-ํœ˜ํŠธ๋‹ˆ ๊ฒ€์ •)์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, 
    ๋‘ ๋…๋ฆฝ์ ์ธ ๊ทธ๋ฃน ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋น„๋ชจ์ˆ˜์  ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ •๊ทœ๋ถ„ํฌ๋กœ ๊ฐ€์ •ํ•˜์ง€ ์•Š๊ณ , ๋ฐ์ดํ„ฐ์˜ ์ˆœ์œ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ทธ๋ฃน๊ฐ„ ์ฐจ์ด๋ฅผ ๊ฒ€์ •ํ•œ๋‹ค.
  • ์ฃผ๋กœ ๋‘ ๊ทธ๋ฃน์˜ ์ค‘์•™๊ฐ’์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

 

๋ณดํ†ต ๋งŽ์€ ๊ฒฝ์šฐ, ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋“ค์ด ์ •๊ทœ ๋ถ„ํฌ๋กœ๋ถ€ํ„ฐ ์ถ”์ถœ๋˜์—ˆ๋‹ค๊ณ  ๋ณด๊ฑฐ๋‚˜, 

์ƒ˜ํ”Œ ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ์ƒ˜ํ”Œ ํ‰๊ท ์€ ์ •๊ทœ ๋ถ„ํฌ๋ฅผ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—(์ค‘์‹ฌ๊ทนํ•œ์ •๋ฆฌ์— ๋”ฐ๋ผ) t-test๋‚˜ ANOVA๊ฐ€ ๋„๋ฆฌ ์“ฐ์ธ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ์ด๋Ÿฐ ๊ฐ€์ •์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ชจ์ˆ˜ ๊ฒ€์ •๋ฒ•์ด ์•„๋‹Œ ๋น„๋ชจ์ˆ˜ ๊ฒ€์ •๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

 

โ–ถ๏ธŽ ๋ชจ์ง‘๋‹จ์˜ ๋ถ„ํฌ๊ฐ€ ์ •๊ทœ ๋ถ„ํฌ๋ผ๊ณ  ํ™•์‹ ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ

โ–ถ๏ธŽ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ์ ์€ ๊ฒฝ์šฐ

 

์ด๋Ÿฐ ๊ฒฝ์šฐ independent t-test๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ง„ ์œŒ์ฝ•์Šจ ์ˆœ์œ„ํ•ฉ ๊ฒ€์ •(Wilcoxon rank sum test)์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋…๋ฆฝ์ ์œผ๋กœ ์ถ”์ถœ๋œ ๋‘ ํ‘œ๋ณธ ์ง‘๋‹จ์„ ๋น„๊ตํ•จ์— ์žˆ์–ด ์ •๊ทœ์„ฑ ๊ฐ€์ •์„ ๋‘์ง€ ์•Š๊ณ  ํ†ต๊ณ„์ ์ธ ๋น„๊ต๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ์š”์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ ์ •๋ฆฌ 
๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ์— ๋Œ€ํ•œ ๊ฐ€์ •์„ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
ํŠนํžˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๊ทœ์„ฑ์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ฑฐ๋‚˜ ์ด์ƒ์น˜๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ž˜ ์“ฐ์ž„!

 

์ฃผ์š” ํŠน์ง• ๋ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€

  1. ๋น„๋ชจ์ˆ˜ ๊ฒ€์ •:
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๊ทœ ๋ถ„ํฌ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ์˜ ์‹ค์ œ ๊ฐ’์ด ์•„๋‹Œ ์ˆœ์œ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒ์น˜(outliers)์— ๋œ ๋ฏผ๊ฐํ•˜๋‹ค.
  2. ๋…๋ฆฝ ํ‘œ๋ณธ:
    • ๋‘ ๊ทธ๋ฃน์€ ์„œ๋กœ ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•œ๋‹ค.
    • ๊ฐ ๊ทธ๋ฃน์˜ ๋ฐ์ดํ„ฐ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ƒ˜ํ”Œ๋ง๋œ๋‹ค.
  3. ๋Œ€์ฒด t-๊ฒ€์ •:
    • ์ •๊ทœ์„ฑ์„ ๊ฐ€์ •ํ•˜์ง€ ์•Š๋Š” t-๊ฒ€์ •์˜ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
    • ๋‘ ๊ทธ๋ฃน ๊ฐ„์˜ ์ค‘์•™๊ฐ’ ์ฐจ์ด๋ฅผ ๊ฒ€์ •ํ•œ๋‹ค.

 

์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•

  1. ๋ฐ์ดํ„ฐ ๊ฒฐํ•ฉ ๋ฐ ์ˆœ์œ„ํ™” : ๋‘ ๊ทธ๋ฃน์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•˜๊ณ  ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์œ„๋ฅผ ๋งค๊น€
  2. ์ˆœ์œ„ ํ•ฉ ๊ณ„์‚ฐ : ๊ฐ ๊ทธ๋ฃน์˜ ์ˆœ์œ„ ํ•ฉ์„ ๊ณ„์‚ฐ
  3. ํ†ต๊ณ„๋Ÿ‰ ๊ณ„์‚ฐ: ์ˆœ์œ„ ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ • ํ†ต๊ณ„๋Ÿ‰์„ ๊ณ„์‚ฐํ•˜๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ p-๊ฐ’์„ ๊ตฌํ•จ

 

๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ๋Š” scipy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ mannwhitneyu ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œŒ์ฝ•์Šจ ์ˆœ์œ„ํ•ฉ ๊ฒ€์ •์„ ์ˆ˜ํ–‰

alternative ํŒŒ๋ผ๋ฏธํ„ฐ

  • 'two-sided': ๋‘ ๊ทธ๋ฃน ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ • (๊ธฐ๋ณธ๊ฐ’)
  • 'less': ์ฒซ ๋ฒˆ์งธ ๊ทธ๋ฃน์ด ๋‘ ๋ฒˆ์งธ ๊ทธ๋ฃน๋ณด๋‹ค ์ž‘๋‹ค๋Š” ๊ฐ€์„ค ๊ฒ€์ •
  • 'greater': ์ฒซ ๋ฒˆ์งธ ๊ทธ๋ฃน์ด ๋‘ ๋ฒˆ์งธ ๊ทธ๋ฃน๋ณด๋‹ค ํฌ๋‹ค๋Š” ๊ฐ€์„ค ๊ฒ€์ •
import numpy as np
from scipy.stats import mannwhitneyu

# ๋‘ ๊ทธ๋ฃน์˜ ๋ฐ์ดํ„ฐ
group1 = np.array([12, 15, 14, 10, 9, 8, 13, 14])
group2 = np.array([7, 8, 6, 9, 5, 6, 7, 8])

# ์œŒ์ฝ•์Šจ ์ˆœ์œ„ํ•ฉ ๊ฒ€์ • ์ˆ˜ํ–‰
stat, p_value = mannwhitneyu(group1, group2, alternative='two-sided')

print("๊ฒ€์ • ํ†ต๊ณ„๋Ÿ‰:", stat)
print("p-๊ฐ’:", p_value)

 

๊ฒฐ๊ณผ ํ•ด์„

  • ๊ฒ€์ • ํ†ต๊ณ„๋Ÿ‰ (stat):
    • ์ˆœ์œ„ ํ•ฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ๋œ ๊ฒ€์ • ํ†ต๊ณ„๋Ÿ‰์œผ๋กœ, ๋‘ ๊ทธ๋ฃน์˜ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค
  • p-๊ฐ’ (p_value):
    • p-๊ฐ’์€ ๊ท€๋ฌด๊ฐ€์„ค์ด ์ฐธ์ผ ๋•Œ ๊ด€์ฐฐ๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด๋‹ค
    • ์ผ๋ฐ˜์ ์œผ๋กœ p-๊ฐ’์ด 0.05๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ท€๋ฌด๊ฐ€์„ค(๋‘ ๊ทธ๋ฃน์˜ ์ค‘์•™๊ฐ’์ด ๊ฐ™๋‹ค)์„ ๊ธฐ๊ฐํ•˜๊ณ , ๋‘ ๊ทธ๋ฃน ๊ฐ„์— ์œ ์˜๋ฏธํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค

 

์ฐธ๊ณ  ์ž๋ฃŒ : https://angeloyeo.github.io/2021/11/17/ranksum.html#google_vignette

728x90