๐Ÿง[weekly project] ํšŒ๊ท€ ๋ชจ๋ธ์„ ์ด์šฉํ•œ ํŽญ๊ท„ ๋ชธ๋ฌด๊ฒŒ ์˜ˆ์ธก

Yujeongยท2024๋…„ 1์›” 19์ผ
1

[weekly project] ํšŒ๊ท€ ๋ชจ๋ธ์„ ์ด์šฉํ•œ ํŽญ๊ท„ ๋ชธ๋ฌด๊ฒŒ ์˜ˆ์ธก

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ๐Ÿง

์ฃผ์–ด์ง„ ํŽญ๊ท„ ๋ฐ์ดํ„ฐ์…‹์„ ํ™œ์šฉํ•˜์—ฌ ํŽญ๊ท„์˜ ๋ชธ๋ฌด๊ฒŒ๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ํšŒ๊ท€ ๋ชจ๋ธ์„ ๋งŒ๋“ ๋‹ค. ํšŒ๊ท€ ๋ชจ๋ธ์€ ๋‹ค์ค‘ ํšŒ๊ท€, ๋ผ์˜, ๋ฆฟ์ง€ ๋ฆฌ๊ทธ๋ ˆ์…˜์„ ์ด์šฉํ•œ๋‹ค. ๋˜ํ•œ ์–ด๋–ค ๋…๋ฆฝ ๋ณ€์ˆ˜๊ฐ€ ๋ชธ๋ฌด๊ฒŒ์— ๊ฐ€์žฅ ์˜ํ–ฅ์„ ๋งŽ์ด ๋ฏธ์น˜๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.

Data๐Ÿ“‚

  • ๋ฐ์ดํ„ฐ ์ƒ์„ธ
    • species: ํŽญ๊ท„ ์ข… (Chinstrap, Adรฉlie, or Gentoo)

    • culmen_length_mm: ๋ถ€๋ฆฌ ๊ธธ์ด (mm)

    • culmen_depth_mm: ๋ถ€๋ฆฌ ๋‘๊ป˜ (mm)

    • flipper_length_mm: ๋‚ ๊ฐœ ๊ธธ์ด (mm)

    • body_mass_g: ๋ชธ๋ฌด๊ฐœ (g)

    • island: Palmer ๊ตฐ๋„์˜ ์„ฌ ์ด๋ฆ„ (Dream, Torgersen, or Biscoe)

    • sex: ์„ฑ๋ณ„

  • ์ดˆ๊ฐ„๋‹จ ํŽญ๊ท„ ์ง€์‹โ—๏ธ

    ํŽญ๊ท„์€ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ข…๋ฅ˜๊ฐ€ ์ด 5๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. ๊ทธ ์ค‘ ์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ ์…‹์—๋Š” ์  ํˆฌํŽญ๊ท„ ์ข…๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์  ํˆฌํŽญ๊ท„์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ฉด!

    • GentooํŽญ๊ท„

      • ์„œ์‹์ง€: ํฌํด๋žœ๋“œ ์ œ๋„, ์‚ฌ์šฐ์Šค์กฐ์ง€์•„ ์„ฌ์— ์ฃผ๋กœ ์„œ์‹, ํ‚น ์กฐ์ง€ ์„ฌ์—์„œ๋„ ์„œ์‹ํ•จ.
      • ์„ฑ๊ฒฉ: ๊ฐ™์€ ์†์— ์†ํ•˜๋Š” ํ„ฑ๋ˆํŽญ๊ท„๊ณผ ์•„๋ธ๋ฆฌํŽญ๊ท„๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์˜จ์ˆœํ•œ ํŽธ.
      • ํŠน์ง•: ํ‚ค๋Š” 51cm ~ 90cm ์ •๋„ ๋˜๋ฉฐ ๋ชธ๋ฌด๊ฒŒ๋Š” ์ˆ˜์ปท์ด ์ตœ๋Œ€ 8.5kg ์ตœ์†Œ 4.9kg์ด๊ณ  ์•”์ปท์€ ์ˆ˜์ปท๋ณด๋‹ค๋Š” ์•ฝ๊ฐ„ ์ž‘์œผ๋ฉฐ ์ตœ๋Œ€ 8.2kg์—์„œ ์ตœ์†Œ 4.5kg์ •๋„ ๋œ๋‹ค. ํŽญ๊ท„ ๊ฐ€์šด๋ฐ์„œ ํ™ฉ์ œํŽญ๊ท„๊ณผย ์™•ํŽญ๊ท„์— ์ด์–ด ๋ฉ์น˜๊ฐ€ 3๋ฒˆ์งธ๋กœ ํฐ ํŽญ๊ท„ (ํ™ฉ์ œ, ์™•ํŽญ๊ท„ ์ œ์™ธํ•˜๋ฉด ๋‹ค๋“ค ๊ณ ๋งŒ๊ณ ๋งŒํ•˜๊ธด ํ•จโ€ฆ)
      • ์ตœ๋Œ€ ์‹œ์† 36km๊นŒ์ง€ ์œ ์˜ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ˆ˜์˜ํ•˜๋Š” ์ƒˆ์ด์ž ์œก์ƒ๋™๋ฌผ. ์ธ๊ฐ„์˜ ์ˆ˜์˜์ด๋‚˜ ๋‹ฌ๋ฆฌ๋Š” ์†๋„๋Š” ๋ฌผ๋ก  ํ‰๊ท ์ ์ธ ์ž์ „๊ฑฐ ๋‹ฌ๋ฆฌ๊ธฐ ์†๋„์˜ 2๋ฐฐ๋‹ค. ์šฐ์ƒค์ธ ๋ณผํŠธ๊ธ‰ 100๋ฏธํ„ฐ ๋‹ฌ๋ฆฌ๊ธฐ ์†๋„๋‚˜ ํ”„๋กœ ์‚ฌ์ดํด๋ง ์„ ์ˆ˜์˜ ์†๋„ ๊ฒฝ๊ธฐ๊ธฐ๋ก ์ •๋„์ด๋‹ค.
    • ChinstrapํŽญ๊ท„

      • ์„œ์‹์ง€: ๋‚จ๊ทน๋ฐ˜๋„, ์‚ฌ์šฐ์Šค์กฐ์ง€์•„ ์‚ฌ์šฐ์Šค์ƒŒ๋“œ์œ„์น˜ ์ œ๋„, ๋ถ€๋ฒ  ์„ฌ ๋“ฑ์—์„œ ์„œ์‹. ์  ํˆฌํŽญ๊ท„๊ณผ ํ•จ๊ป˜ ์„ธ์ข… ๊ณผํ•™๊ธฐ์ง€์—๋„ ์ž์ฃผ ๋ชฉ๊ฒฉ๋จ.
      • ์„ฑ๊ฒฉ: ๋‚ ์นด๋กœ์›Œ ๋ณด์ด๋Š” ์ธ์ƒ์— ๊ฑธ๋งž๋Š” ๋”๋Ÿฝ๊ณ  ์‚ฌ๋‚˜์šด ์„ฑ๊น”์„ ๊ฐ€์ง
      • ํŠน์ง•: ์™ธํ˜•์€ ํฌ๊ธฐ๋Š” ์•ฝ 72cm ๋ชธ๋ฌด๊ฒŒ๋Š” 6~7kg ๊ฐ€๋Ÿ‰ ๋˜๋Š” ์ค‘ํ˜•์ข…
    • AdeliํŽญ๊ท„

      • ์„œ์‹์ง€: ์ฃผ์š” ์„œ์‹์ง€๋Š”ย ๋‚จ๊ทน๋Œ€๋ฅ™์œผ๋กœ, ๋ณธํ† ์™€ย ๋‚จ๊ทน๋ฐ˜๋„๋ฟ ์•„๋‹ˆ๋ผย ์Šค์ฝง์„ฌ, ํŽ˜ํ…Œ๋ฅด 1์„ธ์„ฌ, ์‚ฌ์šฐ์Šค์…ฐํ‹€๋žœ๋“œ ์ œ๋„, ์‚ฌ์šฐ์Šค์˜คํฌ๋‹ˆ ์ œ๋„, ์‚ฌ์šฐ์Šค์กฐ์ง€์•„ ์‚ฌ์šฐ์Šค์ƒŒ๋“œ์œ„์น˜ ์ œ๋„, ํ•ด์Šค์›ฐ์„ฌย ๋“ฑ ์ฃผ์œ„ ์—ด๋„์— ๋Œ€๋ถ€๋ถ„ ๋ถ„ํฌ
      • ์„ฑ๊ฒฉ: ์ž‘๊ณ  ๊ท€์—ฌ์šด ์™ธํ˜•๊ณผ ๋‹ฌ๋ฆฌ ์„ฑ๊ฒฉ์ด ๋งค์šฐ ๋”๋Ÿฝ๋‹ค. ํ˜ธ๊ธฐ์‹ฌ์ด ๋งŽ๊ณ  ๊ฒ์ด ์—†์–ด์„œ ๊ณต๊ฒฉ์„ฑ์ด ๋†’์€๋ฐ ์„ฑ๊น”์ดย ํ„ฑ๋ˆํŽญ๊ท„๊ณผย ๋งž๋จน์„ ์ •๋„๋ผ๊ณ  ํ•œ๋‹ค.
      • ํŠน์ง•: ์  ํˆฌํŽญ๊ท„ ์†์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ข…์ด์ž ํŽญ๊ท„ ์ „์ฒด ๊ฐ€์šด๋ฐ์—์„œ๋Š” ์ค‘ํ˜•์ข…์œผ๋กœ, ํ‚ค๋Š” 65-75cm์— ์ด๋ฅด๋ฉฐ, ๋ชธ๋ฌด๊ฒŒ๋Š” 3.9-6.5kg ์ •๋„๋กœ ๋‚˜๊ฐ„๋‹ค

    โ†’ ๋ชธ๋ฌด๊ฒŒ: ์  ํˆฌ > ํ„ฑ๋ˆ > ์•„๋ธ๋ฆฌ ์ˆœ์œผ๋กœ ๋†’์€ ๊ฒƒ์„ ์•Œ๊ณ  ๊ฐ€๋ฉด ์ข‹๊ฒ ๋‹ค!


์ „์ฒ˜๋ฆฌ ๋ฐ EDA

  • ๊ฒฐ์ธก์น˜ ํ™•์ธ

    ์„ฑ๋ณ„์— 7๊ฐœ์˜ ๊ฒฐ์ธก์น˜๊ฐ€ ์žˆ์—ˆ๋‹ค. 7๊ฐœ๋ฐ–์— ์—†์–ด์„œ ์ œ๊ฑฐ๋ฅผ ํ•ด์•ผํ•˜๋‚˜ ์ƒ๊ฐํ–ˆ์ง€๋งŒ train ๋ฐ์ดํ„ฐ ์…‹์ด 273๊ฐœ๋กœ ์ƒ๊ฐ๋ณด๋‹ค ์ ์–ด์„œ ์ž„์˜๋กœ ๋„ฃ์–ด์ฃผ๊ธฐ๋กœ ํ–ˆ๋‹ค.

    ๊ฐ ์„ฑ๋ณ„์˜ ๋ชธ๋ฌด๊ฒŒ ํ‰๊ท ๊ฐ’์„ ๋‚ด๊ณ  ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ๋˜ ํ‰๊ท ์„ ๋‚ด์„œ 4220.162๋ณด๋‹ค ๋†’์œผ๋ฉด MALE๋กœ, ๋‚ฎ์œผ๋ฉด FEMALE๋กœ ์ฑ„์›Œ์ฃผ์—ˆ๋‹ค.

    ๋˜, ์„ฑ๋ณ„์— ์˜๋ฏธ์—†๋Š” ๊ฐ’ โ€˜.โ€™(์ )์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” ์ œ๊ฑฐํ•ด์ฃผ์—ˆ๋‹ค.

    ์ „์ฒด 273๊ฐœ ๋ฐ์ดํ„ฐ ์ค‘ 1๊ฐœ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค๐Ÿ‘

๊ฐ ๋ณ€์ˆ˜(๋ถ€๋ฆฌ ๊ธธ์ด, ๋ถ€๋ฆฌ ๋†’์ด(?), ๋‚ ๊ฐœ ๊ธธ์ด)์˜ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ทธ๋ ค๋ดค๋‹ค. ์ƒ๊ฐํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ฝค ์™„๋งŒํ•œ ๋ถ„ํฌ๋ฅผ ๋ ๊ณ  ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ ๋”ฐ๋กœ ์ฒ˜๋ฆฌ๋Š” ํ•˜์ง€ ์•Š์•˜๋‹ค.

๊ฐ ์ข…๋“ค์˜ ๊ฐœ์ฒด ์ˆ˜๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด ๋ณด์•˜๋‹ค. ์•„๋ธ๋ฆฌ ํŽญ๊ท„์€ 43.38%, ์  ํˆฌ ํŽญ๊ท„์€ 37.13%, ํ„ฑ๋ˆ์€ 19.49%๋กœ ์•„๋ธ๋ฆฌ ํŽญ๊ท„์˜ ๊ฐœ์ฒด ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์•˜๋‹ค.

๊ฐ ์„œ์‹์ง€์— ๋ถ„ํฌํ•˜๊ณ  ์žˆ๋Š” ํŽญ๊ท„์˜ ์ˆ˜๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด ๋ณด์•˜๋‹ค. Biscoe ์„ฌ์— ์„œ์‹ํ•˜๋Š” ํŽญ๊ท„์ด ์••๋„์ ์œผ๋กœ ๋งŽ์•˜๊ณ  Dream, Torgersen ์„ฌ์ด ์ฐจ๋ก€๋กœ ์ด์–ด์กŒ๋‹ค.

์™ผ์ชฝ bar ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋ฉด ์–ผ๋ผ๋ฆฌ?.? ์•„๋ธ๋ฆฌ ํŽญ๊ท„์€ ๋ชจ๋“  ์„ฌ์— ๊ณจ๊ณ ๋ฃจ ๋ถ„ํฌํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด

์„œ์‹์ง€์— ๋”ฐ๋ผ ๋ชธ๋ฌด๊ฒŒ์— ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค! ๋ผ๋Š” ๊ฐ€์„ค์„ ์„ธ์›Œ๋ณด์•˜๋‹ค.

  • ANOVA ๋ถ„์„ 3๊ฐœ ์ง‘๋‹จ์„ ๋น„๊ตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ANOVA ๋ถ„์„์„ ์‹ค์‹œํ•˜์˜€๋‹ค.
    • ๊ท€๋ฌด๊ฐ€์„ค: ๋ชจ๋“  ๊ทธ๋ฃน์˜ ํ‰๊ท ์ด ๊ฐ™๋‹ค. (๊ฐ ์„ฌ์— ์„œ์‹ํ•˜๋Š” ์•„๋ธ๋ฆฌ ํŽญ๊ท„์˜ ๋ชธ๋ฌด๊ฒŒ ํ‰๊ท ์€ ๊ฐ™๋‹ค)

    • ๋Œ€๋ฆฝ๊ฐ€์„ค: ์ ์–ด๋„ ํ•œ ๊ทธ๋ฃน์˜ ํ‰๊ท ์€ ๋‹ค๋ฅด๋‹ค. (์ ์–ด๋„ ํ•˜๋‚˜์˜ ์„ฌ์—์„œ์˜ ํ‰๊ท  ๋ชธ๋ฌด๊ฒŒ๋Š” ๋‹ค๋ฅด๋‹ค)

      stat, pvalue = f_oneway(biscoe.loc[:, "weight"], dream.loc[:, "weight"], torgersen.loc[:, "weight"])
      if pvalue < 0.05:
          print(f"p-value: {pvalue} -> ๊ท€๋ฌด๊ฐ€์„ค ๊ธฐ๊ฐ!")
      else:
          print(f"p-value: {pvalue} -> ๊ท€๋ฌด๊ฐ€์„ค ์ฑ„ํƒ!")

      One_way ANOVA๋ฅผ ์‹ค์‹œํ•œ ๊ฒฐ๊ณผ ์œ ์˜ํ™•๋ฅ ์ด ์œ ์˜์ˆ˜์ค€ 0.05๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ท€๋ฌด๊ฐ€์„ค์„ ๊ธฐ๊ฐํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, Biscoe, Dream, Torgersen 3๊ฐœ ์„ฌ์— ์„œ์‹ํ•˜๋Š” ์•„๋ธ๋ฆฌ ํŽญ๊ท„์˜ ๋ชธ๋ฌด๊ฒŒ ํ‰๊ท ์€ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณ ๋กœ ์„œ์‹์ง€์™€ ๋ชธ๋ฌด๊ฒŒ ๊ฐ„์˜ ๊ด€๊ณ„๋Š” ์—†๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

      violinplot์„ ๊ทธ๋ ค๋ด๋„ ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

      โ†’ ์•ž์œผ๋กœ island ๋ณ€์ˆ˜ ๊ณ ๋ คโŒ

๊ทธ๋ ‡๋‹ค๋ฉด ๋ชธ๋ฌด๊ฒŒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ณ€์ˆ˜๋Š” ๋ฌด์—‡์ด ์žˆ์„๊นŒ? ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํžˆํŠธ๋งต์„ ๊ทธ๋ ค๋ณด์•˜๋‹ค.

๊ทธ ์ „์—, ์„ฑ๋ณ„๊ณผ ํŽญ๊ท„ ์ข…์ด ๋ชธ๋ฌด๊ฒŒ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ๊ฐ label encoding๊ณผ one-hot encoding์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

  • ์„ฑ๋ณ„ Label encoding

    0: Female, 1: Male

  • ํŽญ๊ท„ ์ข… one-hot encoding

    dummy ๋ณ€์ˆ˜(?)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์›๋ž˜ ์žˆ๋˜ species ์—ด์€ ์ œ๊ฑฐํ•ด์ฃผ์—ˆ๋‹ค.

์ „์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์นœ ํ›„ ํžˆํŠธ๋งต์„ ๊ทธ๋ ค๋ณด์•˜๋‹ค. ANOVA ๋ถ„์„ ๊ฒฐ๊ณผ์—์„œ ์„œ์‹์ง€์™€ ๋ชธ๋ฌด๊ฒŒ๋Š” ๋ณ„๋‹ค๋ฅธ ์—ฐ๊ด€์„ฑ์ด ์—†๋‹ค๊ณ  ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— island ์—ด์€ ์ œ์™ธํ•˜๊ณ  ๊ทธ๋ ธ๋‹ค.

๋‚ ๊ฐœ ๊ธธ์ด์™€ ์  ํˆฌํŽญ๊ท„์—์„œ ๊ฐ•ํ•œ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ฌ ๋•Œ 2๊ฐœ(flipper_length_mm, species_Gentoo)๋Š” ๊ธฐ๋ณธ์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

  • ์  ํˆฌ ํŽญ๊ท„
    • ๋‹ค๋ฅธ ํŽญ๊ท„๋“ค์— ๋น„ํ•ด ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ๋†’๊ณ  ๋‚ ๊ฐœ ๊ธธ์ด๊ฐ€ ๊ธธ๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด ๋ถ€๋ฆฌ ๋‘๊ป˜๋Š” ๋‹ค๋ฅธ ํŽญ๊ท„๋“ค์— ๋น„ํ•ด ์–‡๋‹ค.
  • ์•„๋ธ๋ฆฌ ํŽญ๊ท„
    • ๋ถ€๋ฆฌ ๊ธธ์ด์™€ ๋‚ ๊ฐœ ๊ธธ์ด ๋ชจ๋‘ ์งง๊ณ  ๋ชธ๋ฌด๊ฒŒ๋„ ๋‚ฎ์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ถ€๋ฆฌ ๋‘๊ป˜๋Š” ๊ฝค ๋‹ค์–‘ํ•œ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ๋ถ€๋ฆฌ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅธ ํŽญ๊ท„๋“ค์— ๋น„ํ•ด ๋ˆˆ์— ๋ ๊ฒŒ ์งง๋‹ค.
  • ํ„ฑ๋ˆ ํŽญ๊ท„
    • ํ„ฑ๋ˆ ํŽญ๊ท„์€ ๋„๋“œ๋ผ์ง€๋Š” ํŠน์ง•์€ ํฌ๊ฒŒ ์—†์ด ๋ฌด๋‚œํ•œ ๋ถ„ํฌ๋ฅผ ๊ฐ€์ง„๋‹ค.
    • ์•„๋ธ๋ฆฌ ํŽญ๊ท„๋ณด๋‹ค๋Š” ๋ถ€๋ฆฌ ๊ธธ์ด๊ฐ€ ๊ธธ๊ณ  ์  ํˆฌ ํŽญ๊ท„๋ณด๋‹ค๋Š” ์•„์ฃผ ์•ฝ๊ฐ„ ๊ธด ๊ฒƒ ๊ฐ™๋‹ค. ๋ถ€๋ฆฌ ๋‘๊ป˜๋Š” ์  ํˆฌ ํŽญ๊ท„๋ณด๋‹ค๋Š” ํ™•์‹คํžˆ ๋‘๊ป๊ณ  ์•„๋ธ๋ฆฌ๋ณด๋‹ค๋Š” ์•ฝ๊ฐ„ ์–‡์€ ๊ฒƒ ๊ฐ™๋‹ค.

๋ชจ๋“  ๋ถ€๋ถ„์—์„œ ์ˆ˜์ปท ํŽญ๊ท„์ด ์•”์ปท ํŽญ๊ท„๋ณด๋‹ค ์‹ ์ฒด์ ์ธ ํŠน์ง•์—์„œ ์šฐ์œ„์— ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํšŒ๊ท€ ๋ชจ๋ธ ํ•™์Šต

  • ๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€ ํ•™์Šต

    ์ฒ˜์Œ ํ•™์Šต์‹œํ‚ฌ ๋•Œ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ๋†’์€ 4๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์–ด๋ณด์•˜๋‹ค.

    x_cur_train = x_train[["flipper_length_mm", "species_Gentoo", "sex", "culmen_depth_mm"]]
    results = train_multiple_linear_regression(x_cur_train, y_train)

    R2๊ฐ’์ด 0.867๋กœ ๋†’๊ณ  ๊ฐ ๋ณ€์ˆ˜๋“ค์˜ ์œ ์˜ํ™•๋ฅ ๋„ ๋งค์šฐ ์œ ์˜ํ•ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ข‹์€ ๋ชจ๋ธ์ดโ‰๏ธย ํ•˜๊ณ  ๊ธฐ๋Œ€ํ•˜๋ฉด์„œ VIF ๊ฐ’์„ ์ฐ์–ด๋ณด์•˜๋‹ค.

    VIF ๊ฐ’์„ ํ™•์ธํ•  ๊ฒฐ๊ณผ flipper_length์™€ culmen_depth์˜ ๊ฐ’์ด 10๋ณด๋‹ค ๋„ˆโจโจโจโจ๋ฌด ํฌ๊ฒŒ ๋‚˜์˜จ ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค. ์ด๋Š” ํ•ด๋‹น ๋…๋ฆฝ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๋…๋ฆฝ ๋ณ€์ˆ˜์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ์ผ๋‹จ ๊ฐ€์žฅ ๋†’์€ VIF ๊ฐ’์„ ์ถœ๋ ฅํ•œ flipper_length๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด์•˜๋‹ค.

    flipper_length๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ VIF ๊ฐ’์„ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด๋‹ˆ ๋‚˜๋จธ์ง€ ๋ณ€์ˆ˜๋“ค ๋ชจ๋‘ 10์ดํ•˜๋กœ ๋‚ฎ๊ฒŒ ๋‚˜์˜จ ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค.

    flipper_length๋ฅผ ์ œ๊ฑฐํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋‹ค์‹œ ๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€ ๋ชจ๋ธ์„ ๋Œ๋ ธ์„ ๋•Œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

    ๋ณ€์ˆ˜๊ฐ€ 4๊ฐœ์˜€์„ ๋•Œ R2(0.867) ๋ณด๋‹ค ์กฐ๊ธˆ ๋‚ฎ์€ 0.855(85%๋‚˜ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๋‹ˆโ€ฆ)๋กœ ๊ฝค ๋‚˜์˜์ง€ ์•Š์€ ์„ฑ๋Šฅ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  f์Šค์ฝ”์–ด์˜ ์œ ์˜ํ™•๋ฅ ์„ ํ™•์ธํ–ˆ์„ ๋•Œ์—๋„ ์œ ์˜ํ™•๋ฅ ์ด ๋งค์šฐ ์ž‘์•„์„œ ๊ดœ์ฐฎ์€ ๋ชจ๋ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

    2๋ฒˆ์งธ ํ‘œ) ๊ฐ ๋ณ€์ˆ˜๋“ค์˜ ์œ ์˜ํ™•๋ฅ ์ด 0.00์œผ๋กœ ๋งค์šฐ ์œ ์˜ํ•œ ๊ฐ’์ด๋ฏ€๋กœ ์ œ๊ฑฐํ•  ๋ณ€์ˆ˜๋Š” ์—†์—ˆ๋‹ค.

    3๋ฒˆ์งธ ํ‘œ) skewness์˜ ์ ˆ๋Œ€๊ฐ’์ด 2๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์ •๊ทœ๋ถ„ํฌ์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ๋˜ํ•œ kurtosis์˜ ์ ˆ๋Œ€๊ฐ’์ด 7๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์ •๊ทœ์„ฑ์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    โ†’ R2 ๊ฐ’ ๋†’๊ณ , ๊ฐ ๋ณ€์ˆ˜๋“ค์˜ ์œ ์˜ํ™•๋ฅ  ๋ชจ๋‘ ์œ ์˜ํ•˜๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •๊ทœ์„ฑ์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฝค ๊ดœ์ฐฎ์€ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€? (์ข‹์€ ์„ฑ๋Šฅ์„ ๊ธฐ๋Œ€ํ•œ๋‹ค๋ฉด ๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ชจ๋ธ๋กœ ๊ฐ€์‹œ๊ธธ...)

  • Lasso (L1)

    Lasso ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ธฐ ์ „์— x_test ๋ฐ์ดํ„ฐ์…‹๋„ x_train๊ณผ ๋˜‘๊ฐ™์ด ์ „์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.

    ์„ฑ๋ณ„ โ†’ label encoding, ํŽญ๊ท„ ์ข… โ†’ one-hot encoding ์ง„ํ–‰

    import numpy as np
    
    model = Lasso()
    model.fit(x_cur_train, y_train)
    y_pred = model.predict(x_cur_test)
    print("R2 score", r2_score(y_test, y_pred))
    print("MSE", np.sqrt(mean_squared_error(y_test, y_pred)))
    print("sum of abs coefficient", np.abs(model.coef_).sum())

    ๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€์˜ R2 ๊ฐ’ ๋ณด๋‹ค ์กฐ๊ธˆ ๋–จ์–ด์ง€์ง€๋งŒ ๋น„์Šทํ•œ ๊ฐ’์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    alpha ๊ฐ’์€ ๋ญ˜ ์ง€์ •ํ•˜๋Š”์ง€ ๋ชฐ๋ผ์„œ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค

  • Ridge (L2)

    import numpy as np
    
    model = Ridge()
    model.fit(x_cur_train, y_train)
    y_pred = model.predict(x_cur_test)
    print("R2 score", r2_score(y_test, y_pred))
    print("MSE", np.sqrt(mean_squared_error(y_test, y_pred)))
    print("sum of abs coefficient", np.abs(model.coef_).sum())

    Lasso ๋ชจ๋ธ๊ณผ ๋น„์Šทํ•œ R2 ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • 3๊ฐœ ๋ชจ๋ธ ๋น„๊ต

์ธ์‚ฌ์ดํŠธ๐Ÿง

  • ๊ฐ•ํ•œ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•ด์„œ ์„ ํ˜• ํšŒ๊ท€ ๋ชจ๋ธ์—์„œ ์œ ์˜ํ•œ ๋ณ€์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ƒ๊ด€๊ด€๊ณ„๋Š” ๊ทธ์ € ์ฐธ๊ณ  ์‚ฌํ•ญ์— ์ง€๋‚˜์ง€ ์•Š์•˜๋‹ค.

  • ํŽญ๊ท„์˜ ๋ฌด๊ฒŒ๋ฅผ ์˜ˆ์ธกํ•  ๋•Œ ์„ฑ๋ณ„, ๋ถ€๋ฆฌ ๋‘๊ป˜ ๊ทธ๋ฆฌ๊ณ  ์  ํˆฌํŽญ๊ท„์ธ์ง€ ์•„๋‹Œ์ง€์˜ ์—ฌ๋ถ€๋งŒ ์•ˆ๋‹ค๋ฉด ์–ด๋А์ •๋„ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™๋‹ค.

  • ๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€ ๋ชจ๋ธ์˜ ๋ณ€์ˆ˜์— ์  ํˆฌ ํŽญ๊ท„์˜ ์—ฌ๋ถ€๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒƒ์€ ์  ํˆฌ ํŽญ๊ท„์˜ ๋ฌด๊ฒŒ๊ฐ€ ๋‹ค๋ฅธ ์ข…๋“ค์— ๋น„ํ•ด ๋ˆˆ์— ๋ ๊ฒŒ ๋†’์•„์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์˜ˆ์ƒํ•ด๋ณด์•˜๋‹ค.

  • ์„ฑ๋Šฅ์„ ์›ํ•œ๋‹ค๋ฉด ๋Œ์•„๊ฐ€์„ธ์š”โ€ฆ

profile
์‚ฌ๋ž‘์˜ ๋ˆˆ๋น›โญ๏ธ๐Ÿ˜‰

0๊ฐœ์˜ ๋Œ“๊ธ€