์๋ ํ์ธ์, ๋ด์ค์ ค๋ฆฌ ๊ฐ๋ฐํ ์ฃผ์ ค๋ฆฌ์ ๋๋ค. ์ด๋ฒ ์ฝํ ์ธ ์์๋ ํจ์ ์ ๊ด์ฌ์ด ๋ง์ ํ ์ง์๋ถ์ ๋ถํ์ ๋ฃ๊ณ ์์ํ ๋ฐ์ดํฐ ๋ถ์ ํ๋ก์ ํธ๋ฅผ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค. ๋ถํ์ ์์ธ์ ์จ๋ผ์ธ ์ผํํ ๋ ๋ธ๋๋๋ง๋ค ์๋ง์ ์ฌ์ด์ฆ๋ฅผ ๊ณ ๋ฅด๊ธฐ ์ด๋ ต๋ค๋ ๊ฒ์ด์๋๋ฐ์. ํจ์ ์ ๊ด์ฌ์ด ์๋ ์ ๋ ์๋ฅ ์ฌ์ด์ฆ์ ํต์ผํ๋ ๊ท๊ฒฉ์ด ์์์ง๋ถํฐ ๊ถ๊ธํ๊ณ , ์ด๋ฌํ ๊ถ๊ธ์ฆ์ด ๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋์ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ๊น์ง ์์งํด ์๋ฅ ์ฌ์ด์ฆ์ ๋ํ ์ฌ๋ ์๋ ๋ถ์์ ํ๊ฒ ๋ ์ด์ผ๊ธฐ๋ฅผ ์๊ฐํฉ๋๋ค.
โฆโฆโฆ
์๋ฅ ์ฌ์ด์ฆ์ ํ๊ธฐ๋ฒ
์ฐ์ ์๋ฅ ์ฌ์ด์ฆ ๊ท๊ฒฉ์ ๋ํด ์ฐพ์๋ณด๋ ๋ง 18์ธ ์ด์ ์ฑ์ธ์ ์๋ฅ ์ฌ์ด์ฆ์ ๋ํ ๊ท์ ์ด ์์ต๋๋ค. ๊ตญ๊ฐ๊ธฐ์ ํ์ค์์์ ๊ท์ ํ โKS ์๋ฅ ์น์ ๊ท๊ฒฉ’์ธ๋ฐ์. ์๋ฅ ์น์๋ โํผํธ์ฑโ์ ๋ฐ๋ผ ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ๊ธฐํด์ผ ํฉ๋๋ค. ์ท์ โํผํธ์ฑโ์ด๋ ์ ์ฒด ์น์์ ์๋ฅ ์น์๊ฐ ๋ง๋ ์ ๋์ ๋๋ค. ํผํธ์ฑ์ด ํ์ํ ์๋ฅ๋ ์ ํํ ์ซ์๋ก, ํผํธ์ฑ์ด ํ์ํ์ง ์์ ์๋ฅ๋ ๋ฒ์๋ฅผ ๋ํ๋ด๋ ํธ์นญ์ผ๋ก ํ๊ธฐํฉ๋๋ค. ์ ์ฅ์ 100-85-170์ผ๋ก ์ ๊ณ ํ๋ํฐ๋ L๋ก ์ ๋ ๊ฒ์ ์๋ก ๋ค ์ ์์ต๋๋ค. ์ท ์ข ๋ฅ์ ๋ฐ๋ผ ์ฌ์ด์ฆ๋ ๋ค๋ฅด๊ฒ ํ๊ธฐํ ์ ์๋ ๊ฒ์ด์ฃ .
๋ํ ๊ตญ๊ฐ๋ณ๋ก ํ๊ธฐ๋ฒ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ๊ตญ๋ด ์ฌ์ฑ๋ณต 95 ์ฌ์ด์ฆ๋ ๋ฏธ๊ตญ์์๋ 6, ์๊ตญ์ 10-12, ํ๋์ค๋ 38๋ก ํ๊ธฐ๋ฉ๋๋ค. ๋ฌธ์ ๋ ๊ตญ๋ด์ ๋ค์ด์จ ๋ค์์ ํด์ธ ๋ธ๋๋๊ฐ ์๋ฅ ์ฌ์ด์ฆ๋ฅผ ํ๊ตญ ํ์ค์ผ๋ก ๋ณํํ์ฌ ํ๊ธฐํ์ง ์๋ค๋ ์ ์ ๋๋ค.
์ฆ, ๊ตญ๊ฐ๋ง๋ค ์ฌ์ด์ฆ ํ๊ธฐ๋ฒ์ด ๋ค๋ฅด๊ณ ํ์ค์ด ์๋ค๊ณ ํด๋ ๊ถ๊ณ ์ฌํญ ์ ๋๋, ์ท ์ ์กฐ์ฌ ๋ง์๋๋ก ์ท์ ์ฌ์ด์ฆ๋ฅผ ํ๊ธฐํด๋ ์๊ด์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ์๋ฅ ์ฌ์ด์ฆ๊ฐ ๋ค๋ฅธ ์ด์ ์ ๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์ฌ์ด์ฆ ํ๊ธฐ๋ฒ์ด ๋ค์ํ ๋งํผ ํผ๋์ค๋ฌ์ด ๊ฑฐ๋ ๋์ ค๋ฆฌ(์๋น์)์ ๋ชซ์ ๋๋ค. ๊ทธ๋์ ๋ฌด์ ์ฌ์ ๊ฐ์ ์จ๋ผ์ธ ํจ์ ํ๋ซํผ์์๋ ์๋ฅ ์น์๋ฅผ ์ง์ ์ธก์ ํ์ฌ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋์ด ์ง์ ๊ตฌ๋งคํด์ ์ ์ด๋ณธ ์ฌ์ด์ฆ ์ถ์ฒ ๋ฆฌ๋ทฐ๋ ์ ๊ณตํ์ฃ . ์ด์ฒ๋ผ ์๋ฅ ์ ์กฐ์ฌ์์ ์ ์ํ ์ผ๊ด์ฑ ์๋ ์ฌ์ด์ฆ์ ์ค์ ์ธก์ ๊ณผ ์ฐฉ์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ถ๊ฐ์ ์ผ๋ก ์ ๊ณตํจ์ผ๋ก์จ ๊ตฌ๋งค์ ๋์์ ์ฃผ๋ ๊ฒ๋๋ค.
๊ทธ๋์ ๊ถ๊ธ์ฆ์ด ์ด์ด์ง๋๋ค. ์๋ฅ ์ฌ์ด์ฆ๋ง ํ์ธํ๊ณ ์ท์ ๊ตฌ๋งคํ๋ ๊ฑด ์ด๋ ค์ด ์ผ์ผ๊น์? ์ด๋ฅผ ํ์ธํด๋ณด๊ณ ์ ์๋ฅ ์ฌ์ด์ฆ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ถ์ํ์ฌ ์์๋ณด๊ฒ ์ต๋๋ค.
โฆโฆโฆ
๋ฐ์ดํฐ๋ก ๋ณธ ์๋ฅ ์ฌ์ด์ฆ ํํฉ
์๋ฅ ์ฌ์ด์ฆ์ ๋ค์ํ ์ ๋ณด๋ฅผ ์๊ธฐ ์ํด ๋ฌด์ ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์งํด ๋ถ์ํ๊ธฐ๋ก ํฉ๋๋ค. ๋ฌด์ ์ฌ์์๋ ๋ค์ํ ๋ธ๋๋๋ฅผ ํ๋งคํ๊ณ ๋ฌด์๋ณด๋ค ๋์ผํ ์ธก์ ๊ธฐ์ค์ผ๋ก ์๋ฅ ์น์๋ฅผ ์๋ค๋ ์ ์์ ๋ค์ํ ๋ถ์์ ํ ์ ์๋ค๊ณ ํ๋จํ์ต๋๋ค.
๋ฌด์ ์ฌ ๋ฐ์ดํฐ ์์ง๊ธฐ
๋ฐ์ดํฐ๋ ๋ค๋ค์ต์ ์ด๋, ์ฐ์ ๋ฌด์ ์ฌ์์ ํ๋งคํ๋ ๋ชจ๋ ์๋ฅ ์ข
๋ฅ์ ๋ชจ๋ ์ ํ์ ํฌ๋กค๋งํ๊ธฐ๋ก ๋ง์๋จน์ต๋๋ค. ์์ง ๋์์ ์๋ฅ ์ข
๋ฅ๋ ์์ท, ๋ชจ์, ์๋ง, ์ ๋ฐ ๋ฑ์ ์ก์ธ์๋ฆฌ๋ฅ๋ฅผ ์ ์ธํ ์์, ์์ฐํฐ, ๋ฐ์ง, ์ํผ์ค, ์ค์ปคํธ, ์คํฌ์ธ ์นดํ
๊ณ ๋ฆฌ์
๋๋ค.
์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์ ํ ๋ชฉ๋ก ํ์ด์ง์์ ์ ํ ์ฝ๋๋ฅผ ์์งํ๋ ํฌ๋กค๋ง ์์ ์ 1์ฐจ ์งํํ๊ณ , ์ ํ ์ฝ๋๋ก ์ ํ ์์ธ ํ์ด์ง๋ฅผ ์กฐํํ์ฌ 1) ์ ํ ์ ๋ณด 2) ๋ฆฌ๋ทฐ ์ ๋ณด 3) ๊ตฌ๋งค ์ ๋ณด๋ฅผ ์ด 3๋ฒ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์งํฉ๋๋ค. ๋ฌธ์ ์์ด ํฌ๋กค๋งํ๋ ์์ค์ ์๋ฌ๊ฐ ๋ ์ ํ์ธํด๋ณด๋ ๋ฌด์ ์ฌ ์ ํ ๋ชฉ๋ก ํ์ด์ง๊ฐ ์ต๋ 400ํ์ด์ง๋ฐ์ ์กฐํํ ์ ์๋ค๋ ์ ์ ๋ฐ๊ฒฌํ์์ต๋๋ค. ๊ฒฐ๊ตญ โ๋ฌด์ ์ฌ ์ถ์ฒ์’ ๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค์ผ๋ก ์ต๋ 400ํ์ด์ง๊น์ง ์กฐํํ ์ ํ์ ์์งํ์๊ณ , ์ด 337,247๊ฐ์ ์ํ์ ๋๋ค.
CATEGORY_CODE_LIST = ["001", "003", "020", "022", "002"]
for cat in CATEGORY_CODE_LIST:
print(f"{cat} starts crawling")
end_page = int(getEndPage(cat)["end_page"])
if end_page > 400:
end_page = 400
os.makedirs(f"crawl_data/pages_22.09.21/{cat}", exist_ok=True)
for page in tqdm(range(1, end_page + 1)):
saveProductLinks(category_code=cat, page=page)
์ ๋ฐ์ ์ผ๋ก ์ฌ์ด์ฆ์ ์ํฅ์ ์ค ๋งํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์์งํฉ๋๋ค. ํฌ๋กค๋งํ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์๋ฅ ์ ๋ณด(์นดํ
๊ณ ๋ฆฌ, ์ ํ๋ช
, ๋ธ๋๋, ํ๋ฒ, ์ฑ๋ณ, ์ปฌ๋ฌ ์ต์
๋ฑ), ์ฌ์ด์ฆ ์ ๋ณด(์ฌ์ด์ฆ, ์ด์ฅ, ์ด๊นจ๋๋น, ๊ฐ์ด๋จ๋ฉด, ์๋งค๊ธธ์ด ๋ฑ), ์ฌ์ด์ฆ ๊ฐ์ด๋ ์ ๋ณด(์คํค๋ ํ, ์ค๋ฒ ์ฌ์ด์ฆ, ์ ์ถ์ฑ ์ ๋, ๊ณ์ ๊ฐ, ์์ฌ ์ ์ถ์ฑ, ๋น์นจ ์ ๋), ๊ตฌ๋งค ์ ๋ณด(๋์ ํ๋งค ์, ๊ตฌ๋งค ํ๊ธฐ ์, ์ธ๊ธฐ ๊ตฌ๋งค ์ฐ๋ น๋, ์ฑ๋ณ ๋ฑ), ์ฌ์ด์ฆ ์ถ์ฒ ์ ๋ณด(๊ตฌ๋งค์ ํค, ๋ชธ๋ฌด๊ฒ, ์ฌ์ด์ฆ ์ปค์, ์์์ ๋ฑ)๋ฅผ ํฌํจํฉ๋๋ค.
๋ฌด์ ์ฌ ๋ฐ์ดํฐ ์ ์ ๊ธฐ
๋ฐ์ดํฐ๋ฅผ ์ง์ ํฌ๋กค๋งํ์ฌ ์์งํ ๋ ์น์ ์๋ ๊ตฌ์กฐํ๋์ง ์์ ์ ๋ณด๋ฅผ ๋ถ์ ๋ชฉ์ ์ ๋ง๊ฒ ์ ํํํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. ๋จ์ํ ํ๊ณผ ์ด๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ ํํ๋ฅผ ๋ง๋๋ ์์ ๋ง ํ๋ ๊ฒ์ด ์๋๋ผ, ๋ณ์(์ด)๋ง๋ค ์์งํ๊ณ ์ ํ ๋ฐ์ดํฐ๊ฐ ์ ๋ด๊ฒจ์๋์ง ํ์ธํ๊ณ ์ ์ ํ๋ ๊ณผ์ ์ ํฌํจํ๋๋ฐ์.
๋ฌด์ ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ค์์ ๊ฐ์ฅ ์ด๋ ค์ ๋ ์ ์ ์ฌ์ด์ฆ ๋ณํ์ด์์ต๋๋ค. ์ฌ์ด์ฆ๊ฐ ๋ค์ํ ๊ฐ์ผ๋ก ์์ฑ๋์ด ์์ด ์ผ๊ด๋ ํํ๋ก ๋ณํํ๋ ํ
์คํธ ์ ์ ์์
์ ์๊ฐ์ด ๊ฐ์ฅ ๋ง์ด ์์๋์์ต๋๋ค. ๋ฌด์ ์ฌ์์ ์ฌ์ด์ฆ ํ๋ก ์ ๊ณตํ๋ ๋ฐ์ดํฐ์์ผ๋ฏ๋ก ์ด๋ ์ ๋ ์ฌ์ด์ฆ ๊ธฐ์
๋ฐฉ์์ ํต์ผ์ฑ์ด ์์ ๊ฒ์ด๋ผ๊ณ ์์ํ์๋๋ฐ ๊ทธ๋ ์ง ์์ ๊ฒ ํจ์ ์ด์์ฃ .
# ์ฌ์ด์ฆ ํ๊ธฐ๋ฒ ํต์ผํ๋ ๊ณผ์ ์์, ์์ธ ์ผ์ด์ค๋ฅผ ์ง์ ๋ณํ
def sizing_map(df_col):
SIZE_LABEL_MAP = {
# 1. FREE SIZE
"์ต์
์์": "FREE",
"SIZE": "FREE",
"๋จํ": "FREE",
"์์ด๋ณด๋ฆฌ": "FREE",
"ONE": "FREE",
"OS": "FREE",
"ONE-SIZE": "FREE",
"F": "FREE",
"LIGHT GREY/ONE": "FREE",
"ํ๋ฆฌ์ฌ์ด์ฆ": "FREE",
"์์ฌ์ด์ฆ": "FREE",
"IVORY": "FREE",
"๊ธฐ๋ชจX": "FREE",
"๊ธฐ๋ชจO": "FREE",
"0 3 ๋ฐ๋น ์บฃ ํ๋ธํ": "FREE",
"3 ๋ด์คํ์ดํผ ํ๋ธํ": "FREE",
...(์๋ต)
# 2. ๋ฌธ์ SIZE
"EXTRA SMALL": "XS",
"XSMALL": "XS",
"XSS": "XS",
"(UNISEX) ํด๋์ ์ฒดํฌ ์
์ธ VER2_๋ฅ/M": "M",
"SMALL": "S",
"SS": "S",
"SSS": "S",
"1์ฌ์ด์ฆ(M)": "M",
"XL-XL": "XL",
...(์๋ต)
# 3. ์ซ์ SIZE - ํ์ง๋ ํ๊ธฐ๋ฒ ๋ณํ
"44": "85",
"55": "90",
"66": "95",
"77": "100",
"88": "105",
}
df_col = df_col.replace(SIZE_LABEL_MAP)
return df_col
์ฌ์ด์ฆ๊ฐ ์ปฌ๋ฌ๋ก ์์ฑ๋ ๊ฒฝ์ฐ๊ฐ ๋ค์ ์์๋๋ฐ, ์ค์ ์ ํ์ ํ์ธํด๋ณด๋ ๋จ์ผ ์ฌ์ด์ฆ๋ผ์ ์ผ์ผ์ด ๋ณ๊ฒฝํ์ต๋๋ค. ๋, ์๋ฌธ๊ณผ ์ซ์ ์ฌ์ด์ฆ๋ฅผ ๋ชจ๋ ํ๊ธฐํ ๊ฒฝ์ฐ(์: L100) ์๋ฌธ ๋ผ๋ฒจ๋ง ๋ ์ฌ์ด์ฆ๋ฅผ ์ฐ์ ์ ์ฉํ์ต๋๋ค. ๊ทธ ์ธ ๋ค์ํ ์ผ์ด์ค๊ฐ ์์์ผ๋ ์ ์ ํ ์ฒ๋ฆฌํด์ ๋ฌด์ฌํ ๋ธ๋๋๊ฐ ๋ผ๋ฒจ๋ง ํ ์ฌ์ด์ฆ๋ฅผ ์ ์ ํ์ต๋๋ค!
๋ฌด์ ์ฌ ๋ฐ์ดํฐ ์ธ์ฌ์ดํธ ๋์ถ๊ธฐ
์ ์ ๋ ๋ฐ์ดํฐ์ ํน์ง์ ํ์ ํ๊ธฐ ์ํด ์ฌ์ด์ฆ ๊ด๋ จ ํต๊ณ๋์ ํ์ธํด๋ด ๋๋ค. ๋ฌด์ ์ฌ์์ ์์งํ ์๋ฅ๋ ๋จ์ฑ๋ณต, ์ฌ์ฑ๋ณต, ๊ทธ๋ฆฌ๊ณ ์ฑ๋ณ ๊ตฌ๋ถ์ด ์๋ ์ ๋์น์ค ๋ณต์ผ๋ก ๋๋ฉ๋๋ค. ์ฑ๋ณ์ ๋ฐ๋ฅธ ์ ์ฒด ํฌ๊ธฐ์ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ด์ฆ ๋ฐ์ดํฐ๋ฅผ ์ฑ๋ณ๋ก ์ชผ๊ฐ๋ณผ ํ์๊ฐ ์์ต๋๋ค. ์ฐธ๊ณ ๋ก ๋จ์ฑ๋ณต์ 120,271๊ฐ, ์ฌ์ฑ๋ณต์ 70,091๊ฐ, ์ ๋์น์ค๋ 14,685๊ฐ์ ๊ด์ธก์น๋ฅผ ๊ฐ์ต๋๋ค.
1) ์ ๋์น์ค ์๋ฅ๋ ๋จ์ฑ๋ณต์ ๊ฐ๊น๋ค.
๋ฌด์ ์ฌ์์ ์ธก์ ํ ์ ํ ์ค์ธก ์ฌ์ด์ฆ์ธ ์๋ฅ ์น์๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ณ ์น์ ๋ถํฌ๋ฅผ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์์์ ์์ฐํฐ๋ ๊ธฐ๋ณธ ์ ์ฒด ์น์์ธ ๊ฐ์ด๋๋ , ํ์๋ ํ๋ฆฌ๋๋ ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์คํ ๊ทธ๋จ์ ๊ทธ๋ฆฝ๋๋ค. ์๋ฅ ์น์๋ ์๋ํ์ง ์์์ง๋ง ์๋ชป ์
๋ ฅ๋ ๊ฐ์ ์ผ์ด์ค๊ฐ ์์ด ์ด์์น๋ฅผ ์ ๊ฑฐํ์ต๋๋ค.
๋์ฒด๋ก ๋จ์ฑ๊ณผ ์ ๋์น์ค ๋ณต์ ๋ถํฌ ๋ชจ์๊ณผ ์ต๋น๊ฐ์ ๊ฐ๋ ์น์๊ฐ ๊ฐ์, ๋ฐ์ดํฐ์ ํํ๊ฐ ๋น์ทํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ฉด ์ฌ์ฑ๋ณต์ ๊ฒฝ์ฐ ๊ฐ์ด๋๋ ๋ก ์ธก์ ํ๋ ์์์ ์์ฐํฐ์ ๋ถํฌ ๋ฒ์๊ฐ ๋์ง๋ง ํ์๋ ์ข์ต๋๋ค. ์ฆ, ์ฌ์ฑ๋ณต์ ์์๋ ๋ค๋ฅธ ์ฑ๋ณ์ ๋นํด ๋ ๋ค์ํ ์ฌ์ด์ฆ๋ฅผ ์ ๊ณตํ์ง ์์๊น๋ผ๊ณ ์๊ฐํด๋ณผ ์ ์์ต๋๋ค.
ํฅ๋ฏธ๋ก์ด ์ ์ ์์์ ๊ฒฝ์ฐ, ์ฌ์ฑ๋ณต์ ๋ถํฌ ๋ชจ์์ ๋ค๋ฅด์ง๋ง ๊ฐ์ฅ ๋์ ์ง์ ์ ๋์๊ฐ ๊ฐ์ด๋๋ 120cm๋ก ๋ชจ๋ ์ฑ๋ณ์ด ๋์ผํ์ต๋๋ค. ์ด๋ ์ฑ๋ณ์ ์๊ด์์ด ๊ฐ์ด๋๋ 120cm์ธ ์ ํ์ด ๊ฐ์ฅ ๋ง๋ค๋ ๋ป์ธ๋ฐ์. ๊ทธ๋ฌ๋ฉด ๋ธ๋๋๊ฐ ๋ผ๋ฒจ๋ง ํ ์ฌ์ด์ฆ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด ์ด๋จ๊น? ํ๋ ๊ถ๊ธ์ฆ์ด ์๊ฒผ์ต๋๋ค.
2) L ์ด์ ์ฌ์ด์ฆ ์์๋ ๋ชจ๋ ์ฑ๋ณ์ด ์
์ด๋ ๋ง๋ค.
์ด๋ฒ์๋ ์ฌ์ด์ฆ ๊ธฐ์ค์ผ๋ก ์๋ฅ ์น์ ํ๊ท ์ ์์๋ณด๊ฒ ์ต๋๋ค. ๋ํ์ ์ผ๋ก ์๋ฌธ ์ฌ์ด์ฆ ๋ผ๋ฒจ๋ง์ ํ ์์ ๋ฐ์ดํฐ๋ง ์ดํด๋ณด์๋๋ฐ์. ์ฌ์ด์ฆ๊ฐ ์์์ง์๋ก ํ๊ท ๊ฐ์ด๋๋ ๋ํ ์์์ง๋ ํจํด์ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ด์ฆ ๋ผ๋ฒจ๋ง์ด ์ค์ธก ์ฌ์ด์ฆ์ ํฌ๊ธฐ ์ฐจ์ด๋ฅผ ์ ๋ฐ์ํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์ธ์ฌ์ดํธ๋ก๋ ์ ๋ฐ์ ์ผ๋ก ์ ๋์น์ค๋ ๋จ์ฑ๋ณต๋ณด๋ค ํ๊ท ๊ฐ์ด๋๋ ๊ฐ ์กฐ๊ธ ๋ ํฐ ํธ์ผ๋ก ๋ํ๋ฌ๊ณ , ์ฌ์ฑ๋ณต ๋ํ L ์ฌ์ด์ฆ ์ด์(XXL, XL, L)์ ํ์ ํ์ฌ ๋จ์ฑ๋ณต๋ณด๋ค ์ปธ์ต๋๋ค. ์ฆ, L ์ฌ์ด์ฆ ์ด์์ ์์ ์น์๋ ์ฌ์ฑ๋ณต๊ณผ ์ ๋์น์ค ๋ชจ๋ ๋จ์ฑ๋ณต๋ณด๋ค ์ปธ๋๋ฐ์. ํ๊ท ๊ฐ์ด๋ผ ์ผ๋ฐํํ๊ธฐ์ ๋ฌด๋ฆฌ๊ฐ ์์ง๋ง, ์ฌ์ฑ๋ณต์ L ์ฌ์ด์ฆ๋ ๋จ์ฑ๋ณต๋งํผ์ด๋ ํฌ๊ฒ ์ ์๋์ด ๋ชจ๋ ์ฑ๋ณ์ด ์
์ด๋ ๋ง์ต๋๋ค.
3) ๋๋ถ๋ถ์ ์ฌ์ฑ๋ณต์ 1๊ฐ์ ์ฌ์ด์ฆ๋ง ์ ๊ณตํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ธ๋๋๋ ์ผ๋ง๋ ๋ค์ํ ์ฌ์ด์ฆ๋ฅผ ์ ๊ณตํ ๊น์? ๋ธ๋๋๋ ์ ํ๋น ํ๊ท 2.45๊ฐ์ ์ฌ์ด์ฆ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ๋์์ต๋๋ค. ์ฑ๋ณ๋ก ์ชผ๊ฐ๋ณด๋ฉด ์ ๋์น์ค๋ 3.19๊ฐ, ๋จ์ฑ๋ณต์ 3.08๊ฐ, ์ฌ์ฑ๋ณต์ 1.74๊ฐ ์์ด์๋๋ฐ์. ์ ๋์น์ค๋ ๋จ์ฑ๋ณต๊ณผ ๋น์ทํ ์์ค์ ์ฌ์ด์ฆ ๊ฐ์๋ฅผ ์ ๊ณตํ๋ ๋ฐ๋ฉด ์ฌ์ฑ๋ณต์ ํ์คํ ๊ทธ ์๊ฐ ์ ์ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋์ฑ ๋ณดํธ์ ์ธ ์ ๊ณต ๊ฐ์๋ฅผ ์๊ธฐ ์ํด ํ๊ท ์ด ์๋ ์ต๋น๊ฐ์ผ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์๋ฅ ์ข ๋ฅ(์์, ํ์, ์์ฐํฐ)์ ๋ฐ๋ฅธ ๊ฐ์ ์ฐจ์ด๋ณด๋ค ์ฑ๋ณ์ ๋ฐ๋ฅธ ์ฐจ์ด๊ฐ ๋ช ํํ๋ฐ์. ์ฌ์ฑ๋ณต์ ๊ฒฝ์ฐ ์ค์ปคํธ๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ํ ๊ฐ์ ์ฌ์ด์ฆ๋ง ์ ๊ณตํ์ฌ ์ฌ์ฑ๋ณต์๋ง ์ฌ์ด์ฆ ๋ค์์ฑ์ด ์ ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
# pd.groupby ํจ์๋ฅผ ํ์ฉํ์ฌ ํต๊ณ ํ
์ด๋ธ ์ถ๋ ฅํ๊ธฐ
df_items_sizing[[
"goodsNo_code",
"size_label",
"category_1",
"gender"
]].dropna(
subset="size_label"
).groupby([
"goodsNo_code",
"category_1",
"gender"
]).count().reset_index(
drop=False
).groupby([
"category_1",
"gender"
]).agg(
lambda x: pd.Series.mode(x)[0]
).sort_values(
["category_1", "gender"]
)[["size_label"]]
# size_label
# category_1 gender
# ์์ ๋จ 3
# ์ฌ 1
# ์ ๋์น์ค 4
# ์ค์ปคํธ ์ฌ 2
# ์์ฐํฐ ๋จ 3
# ์ฌ 1
# ์ ๋์น์ค 3
# ์ํผ์ค ์ฌ 1
# ํ์ ๋จ 3
# ์ฌ 1
# ์ ๋์น์ค 3
ํ๊ฐ์ง ์ฌ์ด์ฆ๋ง ์ ๊ณตํ๋ ๋ธ๋๋๊ฐ ์๋์ ์ผ๋ก ๋จ์ผ ์ฌ์ด์ฆ๋ก ์ ์ํ ๊ฒ์ธ์ง ๋ ์ ํํ๊ฒ ์์๋ณผ ํ์๊ฐ ์์ต๋๋ค. ์๋ํ๋ฉด ๋ฌด์ ์ฌ์์ ํ์ ๋ ์ฌ์ด์ฆ๋ฅผ ๋ชฉ๋ก์์ ์ ์ธํ๊ฑฐ๋ ์ ์ด์ ์ผ๋ถ ์ฌ์ด์ฆ๋ง ํ๋งคํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฑ, ๋ค์ํ ์ด์ ๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ์. ๊ทธ๋์ ๋ธ๋๋๊ฐ ์ง์ ๋ช
์ํ ๋จ์ผ ์ฌ์ด์ฆ, ์ฆ ํ๋ฆฌ์ฌ์ด์ฆ์ ๋น์จ์ ๊ณ์ฐํด๋ณด์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ํํ ํ๋ฆฌ์ฌ์ด์ฆ ๋ฐ์ดํฐ๋ ๋ธ๋๋๊ฐ ์ฌ์ด์ฆ๋ฅผ ์ง์ โํ๋ฆฌ์ฌ์ด์ฆโ ํน์ โ์์ฌ์ด์ฆโ๋ก ๋ช
์ํ๊ฑฐ๋ ์ฌ์ด์ฆ๋ฅผ ๋ณ๋๋ก ํ๊ธฐํ์ง ์์ ์ ์ด์ ๋จ์ผ ์ฌ์ด์ฆ๋ก ์ ์๋ ๊ฒฝ์ฐ โ์ต์
์์โ์ ๋น์จ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋ธ๋๋๊ฐ ์๋ฅ๋ฅผ ๋จ์ผ ์ฌ์ด์ฆ๋ก ์ ์ํ์์ผ๋ ์ฌ์ด์ฆ ๋ผ๋ฒจ์ โMโ์ผ๋ก ๋ช
์ํ ๊ฒฝ์ฐ๋ ํฌํจ๋์ง ์์ต๋๋ค.
์ ๋์น์ค์ ํ๋ฆฌ์ฌ์ด์ฆ ๋น์จ์ 1%๋ ๋์ง ์๋ ๋ฐ๋ฉด ์ฌ์ฑ๋ณต์ ํ๋ฆฌ์ฌ์ด์ฆ ๋น์จ์ 26.6%๋ก 2.3%์ธ ๋จ์ฑ๋ณต๋ณด๋ค 13๋ฐฐ ์ ๋ ๋ง์ต๋๋ค. ์๋ฅ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก๋ ์ฌ์ฑ ์ ์ฉ ์๋ฅ์ธ ์ํผ์ค์ ์ค์ปคํธ์ ๋น์จ์ด ํ์คํ ๋์๊ณ , ์ฌ์ฑ๋ณต๋ง ์ดํด๋ณด๋ฉด ์์ 41.5%, ์ํผ์ค 38.3%, ์์ฐํฐ 34.3%๋ก ์๋นํ ๋น์จ์ด ๋จ์ผ ์ฌ์ด์ฆ๋ก ์ ์๋ ์ฌ์ค์ ์ ์ ์์ต๋๋ค. ์๋นํ ๋น์จ์ ํ๋ฆฌ์ฌ์ด์ฆ, ์ ์ฒด๊ฐ ๋ฌด์์ธ์ง ์์ธํ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โฆโฆโฆ
์ฌ์ด์ฆ๊ฐ ์๋ ์ท, ํ๋ฆฌ์ฌ์ด์ฆ
ํ๋ฆฌ์ฌ์ด์ฆ๋ ๋ฌด์จ ์ฌ์ด์ฆ์ผ๊น?
ํ๋ฆฌ์ฌ์ด์ฆ๋ ์ด๋ค ์ฌ์ด์ฆ์ ํด๋นํ ์ง ์์ ๋ฐ์ดํฐ๋ง ํ์ ํ์ฌ ๋ค์ํ ๊ด์ ์์ ์ ์ถํด๋ณด๊ฒ ์ต๋๋ค. ๊ณ ๋ ค๋ํ๊ตญ์ด๋์ฌ์ ์ ๋ฐ๋ฅด๋ฉด ํ๋ฆฌ์ฌ์ด์ฆ๋ ๋ณดํต ์ฌ๋๋ค์ ํ๊ท ์ฒดํ์ ๋ง์ถ ์๋ฅ๋ก ์ ์ํฉ๋๋ค. ์ ์๊ฐ ๋ค์ ์ฃผ๊ด์ ์ด๋ผ๋ ์๊ฐ์ด ๋ค์ง๋ง, ์ผ๋จ ๋ฌด์ ์ฌ์์ ์์งํ ์ค๊ตฌ๋งค ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ โํ๊ท ์ฒดํโ์ ๊ณ์ฐํด๋ณด๊ฒ ์ต๋๋ค. ํ๋ฆฌ์ฌ์ด์ฆ ๊ตฌ๋งค์์ ํ๊ท ํค์ ๋ชธ๋ฌด๊ฒ์ ๊ฐ์ฅ ์ ์ฌํ ์ฌ์ด์ฆ 1๊ฐ๋ฅผ ๊ผฝ์๋ณด๋, ์๋์ ๊ฐ์๋๋ฐ์. ํ๋ฆฌ์ฌ์ด์ฆ๋ ๋จ์๊ฐ ๊ตฌ๋งคํ๋ฉด L์, ์ฌ์๊ฐ ๊ตฌ๋งคํ๋ฉด M ์ฌ์ด์ฆ์ ํด๋นํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ฐ๋ฉด ์ ๊ณ์์๋ ํ๋ฆฌ์ฌ์ด์ฆ๋ฅผ ๊ฐ์ฅ ๋ง์ด ํ๋งค๋๋ ์ฌ์ด์ฆ๋ก ์ ์ํ๋ค๊ณ ํฉ๋๋ค. ๋ค์ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ก ๊ฐ์ฅ ๋ง์ด ๊ตฌ๋งคํ ์ฌ์ด์ฆ๋ฅผ ์ดํด๋ณด๋ ๋จ์ฑ๋ณต๊ณผ ์ ๋์น์ค๋ L, ์ฌ์ฑ๋ณต์ M ์ฌ์ด์ฆ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด๋ ๊ตฌ๋งค์์ ํ๊ท ์ฒดํ ๋ฐ์ดํฐ๋ก ํ์ธํ์ ๋์ ๋์ผํ ๊ฒฐ๊ณผ์์ ์ ์ ์์ต๋๋ค.
ํ๋ฆฌ์ฌ์ด์ฆ์ 2๊ฐ์ง ์ ์๋ฅผ ๋ฐํ์ผ๋ก ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํด๋ณด๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๊ณ , ํ๋ฆฌ์ฌ์ด์ฆ ๋จ์ฑ๋ณต์ L, ์ฌ์ฑ๋ณต์ M ์ฌ์ด์ฆ์์ ์ ์ถํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ ๋ณด์กฐ์ ์ธ ์งํ์ผ ์๋ฐ์ ์๋๋ฐ์. ์ด๋ ์ ๋ ๊ตฌ๋งค๊ฐ ์ด๋ค์ ธ์ผ ์ ์ ์๋ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์ ๋ณด๋ค ์ ํํ๊ฒ ๋ธ๋๋์์ ์ ๊ณตํ๋ ์๋ฅ ์ ๋ณด ๋ฐ์ดํฐ๋ก ๋ถ์ํ์ ์์๋ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ๋ฆฌ์ฌ์ด์ฆ, ๋ธ๋๋๊ฐ ์ ์ํด๋ ๊ทธ๋ด๊น?
๋ง์ฝ์ ํ๋ฆฌ์ฌ์ด์ฆ๋ฅผ ์ ์ํ ๋ธ๋๋์ โํ๋ฆฌ์ฌ์ด์ฆ๋ฅผ ํธ์นญ ์ฌ์ด์ฆ๋ก ๋ณ๊ฒฝํด์ฃผ์ธ์’๋ผ๊ณ ๊ฐ์ ์ฑ์ ๋ถ์ฌํ๋ค๋ฉด? ์ฆ, ํ๋ฆฌ์ฌ์ด์ฆ๋ฅผ ๋ธ๋๋์์ ์ฌ์ด์ฆ๋ฅผ ์ ์ํ ๋ฐฉ์๋๋ก ๋ผ๋ฒจ๋ง ํ๋ฉด ๊ณผ์ฐ ๋ฌด์์ผ์ง ๊ถ๊ธํด์ก๋๋ฐ์. ์ง์ ๋ธ๋๋ ๊ด๊ณ์์๊ฒ ๋ฌผ์ด๋ด์ ์ ๋ต์ ์ป์ผ๋ฉด ์ข๊ฒ ์ง๋ง, ํ์ค์ ์ธ ์ด๋ ค์์ด ์์ผ๋ ๊ธฐ๊ณ์ โ๋ค๊ฐ ๋์ ๋ธ๋๋ ๊ด๊ณ์์ฒ๋ผ ํ๋ํด’๋ผ๊ณ ํ์ต์ํค๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ธ๋๋๊ฐ ์ง์ ํ ํธ์นญ ์ฌ์ด์ฆ ๋ฐ์ดํฐ๋ก ์ง๋ ํ์ต์ ์์ผ ์ฌ์ด์ฆ ๋ถ๋ฅ๊ธฐ๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ด์ฆ ์ ๋ต์ด ์๋ ํ๋ฆฌ์ฌ์ด์ฆ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉด ์ฌ๋ฐ๋ฅธ ์ฌ์ด์ฆ ๋ผ๋ฒจ์ ๋ฌ์์ฃผ๋ ๊ฒ์ด์ฃ .
์์ ํ๋ฆฌ์ฌ์ด์ฆ์ ๋น์จ์ด ๊ฐ์ฅ ๋์๋ ์ฌ์ฑ๋ณต ์์์ ํ๋ฆฌ์ฌ์ด์ฆ๋ฅผ ๋ผ๋ฒจ๋ง ํ๊ธฐ ์ํด ์์ ์๋ฅ ์ฌ์ด์ฆ๋ฅผ ์์ธกํ๋ ๋จธ์ ๋ฌ๋ ๋ถ๋ฅ๊ธฐ๋ฅผ ๋ง๋ค์ด์ ํ์ธํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค! ์ฌ์ฑ๊ณผ ๋จ์ฑ๋ณต์ ๊ต์ฐจ ๊ตฌ๋งค๊ฐ ์ด๋ค์ง ์ ์๋ ์ ์ ๊ณ ๋ คํ๊ณ , ๋ฐ์ดํฐ ์
์ฌ์ด์ฆ์ ํ๋ณด๋ฅผ ์ํด ์ ์ฒด ์ฑ๋ณ์ ๋์์ผ๋ก ํ ์์ ๋ถ๋ฅ ๋ถ์์ ํฉ๋๋ค.
1) ํ๊ฒ ๋ณ์ ๋ผ๋ฒจ๋ง
์์ ์ฌ์ด์ฆ๋ฅผ ์์ธกํ๋ ๋ถ๋ฅ๊ธฐ๋ฅผ ๋ง๋๋ ๊ฒ ๋ชฉ์ ์ด๋ฏ๋ก ํ๊ฒ ๋ณ์๋ ์ฌ์ด์ฆ์
๋๋ค. ์ฌ์ด์ฆ ํด๋์ค๋ KS ํ์ค โ๋ฒ์ ํ์ ์น์ ๋ถ๋ฅํโ์ ๋ง์ถฐ ๋จ์ฑ๋ณต๊ณผ ์ ๋์น์ค๋ M~XL, ์ฌ์ฑ๋ณต์ S~XL๋ก ๊ตฌ๋ถํ๋, ํด๋น ํด๋์ค ๋ฒ์ ๋ฐ์ ์ฌ์ด์ฆ๋ S-, XL+์ ๊ฐ์ด ๋ผ๋ฒจ๋ง ํ์ฌ ์ดํ์ ์ด์์ ๋ฒ์๋ฅผ ํ์ํฉ๋๋ค. ์์ ๋ฐ์ดํฐ ๊ธฐ์ ํต๊ณ(์ธ์ฌ์ดํธ ๋์ถ) ๋จ๊ณ์์ ์ ๋์น์ค ๋ฐ์ดํฐ๊ฐ ๋จ์ฑ๋ณต๊ณผ ์ ์ฌํ ํน์ง์ ๊ฐ๋ ๊ฒ์ ํ์ธํ์๊ธฐ ๋๋ฌธ์ ๋จ์ฑ๋ณต๊ณผ ์ ๋์น์ค ๋ณต์ ๊ฐ์ ๊ธฐ์ค์ ํด๋์ค๋ก ๊ตฌ๋ถํฉ๋๋ค.
## ์ฌ์ด์ฆ ์๋ ๊ฒฝ์ฐ, ์ ์ธ
df_shirts = df_shirts[df_shirts["size_final"].notnull()]
# ๋ฒ์ ์ฌ์ด์ฆ, ์ ์ธ: 'S-M'์ฌ์ด์ฆ 3 records
df_shirts = df_shirts[df_shirts["size_final"] != "S-M"]
# ์ฌ์ด์ฆ ๋ผ๋ฒจ๋ง ํต์ผ
repl_map = {
"XXL": "XL+",
"XXXL": "XL+",
"XXXXL": "XL+",
"XXL-XXXL": "XL+",
"XS": "S-",
"XXS": "S-",
"95-100": "98",
"100-105": "103",
"105-115": "110",
"95-105": "100",
"105-110": "108",
"85-95": "90",
}
df_shirts["size_final"] = df_shirts["size_final"].replace(repl_map)
# ๋ผ๋ฒจ๋ง์ด ํ์ํ ํ
์ด๋ธ ๋ถ๋ฆฌ
not_convert = ["XL+", "XL", "L", "M", "S", "S-", "FREE"]
df_in = df_shirts[df_shirts["size_final"].isin(not_convert)]
df_not = df_shirts[~df_shirts["size_final"].isin(not_convert)]
# target ๋ณ์ ์์ฑ - ์ซ์ ๋ผ๋ฒจ ์ฌ์ด์ฆ๋ฅผ ํธ์นญ ์ฌ์ด์ฆ๋ก ๋ผ๋ฒจ๋ง
df_not["size_target"] = np.NaN
df_not["size_final"] = df_not["size_final"].astype("int")
# ์ฌ
bins = [-1, 71, 81, 88, 97, 108, 1000]
labels = ["S-", "S", "M", "L", "XL", "XL+"]
df_not["size_target"] = df_not["size_target"].fillna(
pd.cut(df_not[f]["size_final"], bins=bins, labels=labels)
)
# ๋จ/์ ๋์น์ค
bins = [-1, 84, 92, 100, 107, 1000]
labels = ["M-", "M", "L", "XL", "XL+"]
df_not["size_target"] = df_not["size_target"].fillna(
pd.cut(df_not[m]["size_final"], bins=bins, labels=labels)
)
df_not["size_target"] = df_not["size_target"].fillna(
pd.cut(df_not[uni]["size_final"], bins=bins, labels=labels)
)
# ์ต์ข
์ฌ์ด์ฆ ํ
์ด๋ธ ์์ฑ
df_in["size_target"] = df_in["size_final"]
df_shirts_final = pd.concat([df_in, df_not], axis=0)
์ต์ข ์ ์ผ๋ก ์ฌ์ด์ฆ๋ฅผ S-, S, M- M, L, XL, XL+ ํด๋์ค๋ก ๋ถ๋ฅํ ํ, ํด๋์ค ๊ฐ ์์นํ ๋ณ์์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋์ง ํ์ธํ์๋๋ฐ์. M- ์ฌ์ด์ฆ์ M ์ฌ์ด์ฆ์ ๊ฐ์ด๋๋ ํ๊ท ์ฐจ์ด๊ฐ ํฌ์ง ์์, ํด๋์ค ๋ถ๋ฅ๊ฐ ๋ ์๋ ์ ์๋๋ก โM-โ์ โMโ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ํตํฉํ์์ต๋๋ค.
2) ๋ณ์ ์์ฑ feature engineering
๋ถ๋ฅ ๋ถ์์ ์์ ์ ์ ๋ ๋ฐ์ดํฐ ์ค ์ฌ์ด์ฆ์ ์ํฅ์ ์ค ๋งํ ์์๋ฅผ ๋ณ๋ ํผ์ฒ(feature, ๋ณ์)๋ก ์์ฑํ๋ ์์
์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ ฅ์ฑ์ด ์๋ ์์ฌ๋ก ์ ์ํ ์์๋ ์์ ๋ณด์ด์ง๋ง ์ฐฉ์ฉํ์ ๋ ๋ง์ ์ ์์ผ๋ฏ๋ก ํผ์ฒ๋ฅผ ๋ฐ๋ก ๋ง๋ค์๋๋ฐ์. ์์ฌ์ ์คํ๊ณผ ํด๋ฆฌ์ฐ๋ ํ์ด ํฌํจ๋ ๊ฒฝ์ฐ์ ํ๋ ฅ์ฑ์ด ์๋ ์๋ฅ๋ผ๊ณ ํ๋จํ์ฌ is_flexible์ True๊ฐ์ ๋ถ์ฌํ์ต๋๋ค. ๊ทธ ์ธ ํ๋ ฅ์ฑ์ด ์๋ ์์ฌ์ธ ํด๋ฆฌ์์คํฐ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ is_poly๋ผ๋ ํผ์ฒ๋ฅผ ๋ง๋๋ ๋ฑ์ ์์
์ ํ์ต๋๋ค. ๋ํ ์คํฌ์ธ ์จ์ด๋ ์ผ์๋ณต๋ณด๋ค ์ ์ฌ์ด์ฆ๋ก ์
์ ์ ์์ด์ ์คํฌ์ธ ์จ์ด์ธ์ง์ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ ๋ณ์(is_sportswear)๋ก ๋ณํํฉ๋๋ค.
3) ๋ถ๋ฅ ๋ชจํ ํ์ต ๋ฐ ์ต์ ํ
ํด๋์ค์ ๊ฐ์๊ฐ ๋ง๋ค๋ณด๋ ๋ถ๋ฅ๊ฐ ์ ๋ ์ ์๋๋ก ๋น์ ํ ๋ถ๋ฅ ๋ชจํ์ ์์ฃผ๋ก ํ์ต์์ผฐ์ต๋๋ค. ์ฐ์ ๋ชจ๋ ํผ์ฒ๋ฅผ ํ์ดํผ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ ํ์ง ์์ ๊ธฐ๋ณธ ๋ชจํ์ ํ์ตํ ํ, ์ต์ ํ ์์
์ ํฉ๋๋ค.
lrc = LogisticRegression()
svc = SVC()
dt = DecisionTreeClassifier()
rfc = RandomForestClassifier(random_state=42)
xgb = XGBClassifier()
์ต์ ์ ํผ์ฒ ๊ฐ์ ๋ฐ ์กฐํฉ์ ๋์ถ ํ ๊ฐ์ฅ ์ ์๊ฐ ๋์ ๋ชจ๋ธ, XGBoost๋ฅผ ํ์ตํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ์๋๋ฐ์. ์ด 33๊ฐ์ ํผ์ฒ ์ค 17๊ฐ์ ํผ์ฒ๋ฅผ ์ฌ์ฉํ์๊ณ , ์ต์ข ์ ํ๋ ํผ์ฒ๋ ์๋์ ๊ฐ์ต๋๋ค.
์ฌ์ด์ฆ ๋ถ๋ฅ์ ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น ํผ์ฒ๋ โ์ด์ฅ’์ด์๋๋ฐ์. ์์์ธ๋ก โ๊ฐ์ด๋๋ ’ ์น์๋ณด๋ค โ์ด์ฅ’์ ๊ธธ์ด๊ฐ ๋ ์ฌ์ด์ฆ ๋ถ๋ฅ๋ฅผ ๋ช ํํ ๊ตฌ๋ถํ๋ ์์ธ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. โ์ด์ฅ’ ๋ค์์ผ๋ก๋ ํผ์ฒ์ ์ค์๋๊ฐ ์๋น์ทํ ์์ค์ด์์ผ๋ โcategory_2โ, โis_polyโ, โ๊ฐ์ด๋๋ โ ์์ด์์ต๋๋ค. ์ท์ ์ข ๋ฅ์ ๋ฐ๋ผ, ๊ทธ๋ฆฌ๊ณ ์ ์ถ์ฑ์ด ์๋ ์์ฌ(poly, ํด๋ฆฌ์์คํฐ)์ ํฌํจ ์ฌ๋ถ์ ๋ฐ๋ผ ์ฌ์ด์ฆ๊ฐ ๋ค๋ฅด๊ฒ ๊ฒฐ์ ๋๋ค๋ ์ ์ ์ ์ ์์ต๋๋ค. ๋ ํฅ๋ฏธ๋ก์ด ์ ์ ์ท์ ์ ์ํ๋ ๊ธฐ์ค์ ๋ฐ๋ผ ์ฌ์ด์ฆ๋ฅผ ๋ค๋ฅด๊ฒ ๊ธฐ์ฌํ ์ ์์ ํ ๋ฐ์. ์ฌ์ด์ฆ ๋ถ๋ฅ์ ํ์ฌ(company_info)์ ๋ธ๋๋(brand)๊ฐ ์ํฅ์ ์ฃผ๋ ๊ฒ์ผ๋ก ๋์, ์ท ์ ์กฐ์ฌ์ ๋ฐ๋ผ ์ฌ์ด์ฆ ๋ถ๋ฅ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
# category_2(์ท์ ์ข
๋ฅ)์ ์ธ๋ถ ํญ๋ชฉ
df_shirts["category_2"].unique()
# array(
# [
# "๋ํธ/์ค์จํฐ",
# "๋ฐ์๋งค ํฐ์
์ธ ",
# "๋งจํฌ๋งจ/์ค์จํธ์
์ธ ",
# "ํผ์ผ/์นด๋ผ ํฐ์
์ธ ",
# "๊ธด์๋งค ํฐ์
์ธ ",
# "์
์ธ /๋ธ๋ผ์ฐ์ค",
# "ํ๋ ํฐ์
์ธ ",
# "๊ธฐํ ์์",
# "๋ฏผ์๋งค ํฐ์
์ธ ",
# ],
# dtype=object,
# )
4) ๋ถ๋ฅ ๋ชจํ ํ๊ฐ
์ต์ข
์ ์๋ฅผ ๋ด๊ธฐ ์ ์ ๊ฒ์ฆ ๋ฐ์ดํฐ ์
์ผ๋ก ๋ถ๋ฅ ๋ชจํ์ ์ฑ๋ฅ ํ๊ฐ ์ ์๋ฅผ ํ์ธํฉ๋๋ค. ๋ชจ๋ ํด๋์ค์ ์ ๋ฐ๋(precision)๋ 0.7์ ๋์ด ์ด๋ ์ ๋ ๋ชจํ์ด ์ ๋ต์ง๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒ์ถํ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Small ์ดํ ์ฌ์ด์ฆ์ธ S-์ ์ฌํ์จ(recall) ์ ์๊ฐ ๋งค์ฐ ๋ฎ์๋๋ฐ์. ์ด๋ ๊ด์ธก์น ์(support)๊ฐ 140๊ฐ๋ก ๋งค์ฐ ๋ฎ์ ์ถฉ๋ถํ ํ์ต์ ํ์ง ๋ชปํ ๊ฒ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ํด๋น ํด๋์ค๋ฅผ ์ ์ธํ๊ณ ๋ ์ ๋ฐ๋์ ์ฌํ์จ์ ์ข
ํฉ์ ์ผ๋ก ํ๊ฐํ f1 ์ค์ฝ์ด๋ฅผ ๋ฐ์ฌ๋ฆผํ์ฌ ๋ณด๋ฉด 0.8์ ๋๋ ์์ค์
๋๋ค. ํด๋์ค๋ณ ๊ฐ์์ ์ฐจ์ด๊ฐ ์์ด ๊ฐ์ค ํ๊ท ์ผ๋ก ํ์ธํ ํ์๊ฐ ์์ผ๋ฉฐ, ์ต์ข
f1 ์ค์ฝ์ด๋ 0.8170์
๋๋ค.
# ๊ฒ์ฆ ๋ฐ์ดํฐ์
์ผ๋ก ์ฐ์ถํ ์ ์
print(classification_report(
y_val, xgb5_prd, target_names=encoder.classes_, digits=4
))
# precision recall f1-score support
# L 0.8130 0.8178 0.8154 3249
# M 0.7944 0.8042 0.7992 2911
# S 0.8208 0.8157 0.8182 1595
# S- 0.7128 0.4786 0.5726 140
# XL 0.8215 0.8541 0.8375 1967
# XL+ 0.9287 0.8368 0.8803 778
# accuracy 0.8174 10640
# macro avg 0.8152 0.7678 0.7872 10640
# weighted avg 0.8178 0.8174 0.8170 10640
์ต์ข ํ๊ฐ ๋ฐ์ดํฐ์ ์ผ๋ก ์์ธกํ ๋ชจํ์ ํ๊ฐ ์ ์๋ ์๋์ ๊ฐ์ต๋๋ค. F1 ์ค์ฝ์ด๋ ์ฝ 0.82, ROC AUC ์ค์ฝ์ด๋ ์ฝ 0.97์ ๋๋ค. ํด๋น ์ ์๋ ํ์ต์ํจ ๋ถ๋ฅ๊ธฐ๊ฐ ์ฌ์ด์ฆ ๋ผ๋ฒจ๋ง์ ๋์์ง ์๊ฒ ์์ธกํ์๊ณ , ํ๋ฆฌ์ฌ์ด์ฆ ์๋ฅ๋ฅผ ๋ผ๋ฒจ๋ง์ ํด๋ด๋ ์๋ฏธ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํด๋ณผ ์ ์๋ค๊ณ ํ๋จํ์์ต๋๋ค.
# ํ๊ฐ ๋ฐ์ดํฐ์
์ผ๋ก ์ฐ์ถํ ์ต์ข
์ ์
# ์ต์ข
๋ชจํ
xgb5 = XGBClassifier(
n_estimators=700,
learning_rate=0.15,
max_depth=7,
random_state=42
)
# ์ต์ข
์ ์ - f1 score
xgb5_final = xgb5.predict(X_test)
print(f1_score(y_test, xgb5_final, average='weighted'))
# 0.8195403944763383
# ์ต์ข
์ ์ - roc auc score
xgb5_final_proba = xgb5.predict_proba(X_test)
print(roc_auc_score(y_test, xgb5_final_proba, multi_class='ovr'))
# 0.9691912542684166
ํ๋ฆฌ์ฌ์ด์ฆ์ ์ฌ์ด์ฆ ์์ธก ๊ฒฐ๊ณผ๋?
๋๋์ด ๊ธด ๋จธ์ ๋ฌ๋ ์ฌ์ ์ ๋ง์ง๋ง ๋จ๊ณ! ์๋๋ ์์ ์๋ฅ ์ฌ์ด์ฆ ๋ถ๋ฅ๊ธฐ์ โFREEโ ๋ผ๋ฒจ ์ฌ์ด์ฆ๋ฅผ ์์ธกํด๋ณธ ๊ฒฐ๊ณผ์ ๋๋ค. ํ๋ฆฌ์ฌ์ด์ฆ๋ ๋จ์ฑ๋ณต ๋ฐ ์ ๋์น์ค์ ๊ฒฝ์ฐ L ์ฌ์ด์ฆ, ์ฌ์ฑ๋ณต์ ๊ฒฝ์ฐ M ์ฌ์ด์ฆ์ ๊ฐ์ฅ ๋ง์ด ํด๋นํฉ๋๋ค. ๋ค๋ง ์ฌ์ฑ๋ณต์ ์ด 4,149๊ฐ์ ํ๋ฆฌ์ฌ์ด์ฆ ์ค์์ 45.1%๊ฐ M ์ฌ์ด์ฆ, 42.2%๊ฐ S ์ฌ์ด์ฆ๋ก ๋์จ ๋งํผ ํ๋ฆฌ์ฌ์ด์ฆ๋ S์ M ์ฌ์ด์ฆ๋ก ์ ์๋๋ ๋น์ค์ด ๊ฑฐ์ ๋น์ทํ๋ค๊ณ ์ดํดํ๋ ๊ฒ ์ ํํฉ๋๋ค. ๋ํ ์ ๋์น์ค์ ํ๋ฆฌ์ฌ์ด์ฆ๋ ์ด 31๊ฐ๋ฐ์ ๋์ง ์์, ํด๋น ๊ฒฐ๊ณผ์ ํด๋นํ๋ค๊ณ ๊ฒฐ๋ก ์ง๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์์ต๋๋ค.
โฆโฆโฆ
์๋ฅ ์ฌ์ด์ฆ, ๋ผ๋ฒจ์ ์์ง ๋ง์
์ง์ ์์งํ ์๋ฅ ๋ฐ์ดํฐ๋ฅผ ๋ค์ํ ๋ฐฉ๋ฒ๊ณผ ๊ด์ ์์ ๋ถ์ํ์ฌ ์ฌ์ด์ฆ์ ๋ํ ์ฌ๋ฌ ๊ฐ์ง ๊ถ๊ธ์ฆ์ ํ์ธํด๋ณด๋ ์๊ฐ์ด์๋๋ฐ์. ๋ธ๋๋๊ฐ ์ ์ํ ์ฌ์ด์ฆ ํธ์นญ๋๋ก ๋์ ์ฌ์ด์ฆ๋ฅผ ์ ์ํ์ง ๋ง์์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ํ๋ฆฌ์ฌ์ด์ฆ๋ฅผ ์ ์ด์ ์ฌ์ด์ฆ๊ฐ ๋ง์ง ์์ ๊ฒฝ์ฐ์๋, ์ฃ๋ถ๋ฅด๊ฒ ๋์ ์ฒดํ์ ๋จ๊ณผ ๋น๊ตํ ํ์๋ ์๊ฒ ๋ค๋ ์๊ฐ๊ณผ ํจ๊ป์. ์ฌ์ด์ฆ๋ ์๊ฐ๋ณด๋ค ์ท์ ์ข ๋ฅ, ์์ฌ ๊ทธ๋ฆฌ๊ณ ๋ธ๋๋๋ง๋ค ์์ดํ์ฌ ๊ตฌ๋งค ์ ๋ค์ํ ์์๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์ด๋ฒ ์ฝํ ์ธ ์ ์๊ฐ์ ์ค ๋์ ค๋ฆฌ๋์ ์ฒซ ๋ฒ์งธ ๊ถ๊ธ์ฆ, โ์ ๋ธ๋๋๋ง๋ค ์ฌ์ด์ฆ๊ฐ ๋ค๋ฅธ์ง ๊ถ๊ธํ์ต๋๋ค’๋ ๊ทผ๋ณธ์ ์ผ๋ก ์๋ฅ ์ฌ์ด์ฆ๋ ํ๊ธฐ๋ฒ์ด ๋ค์ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅผ ์๋ฐ์ ์๋ค๋ ์ ์ ์์๋ณด์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ๋ธ๋๋๋ง๋ค ์ฌ์ด์ฆ๊ฐ ๋ค๋ฅธ ๊ฒ ๋ง๋ค๊ณ ํผ์ฒ ์ค์๋๋ฅผ ํตํด ํ์ธํ ์ ์์์ต๋๋ค.
XL์ ์ ๋ ๋์ ค๋ฆฌ๋์ด ์์ ํฐ์ ์ธ ๋ฅผ ์ฐ๋ค๋ฉดโฆ ์๋ ๋ด์ฉ ์ ๋๋ก ๊ฟํ์ ์ ๋ฌํด๋๋ฆด ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.ย
- ์๋ฅ ์ ์กฐ์ฌ/๋ธ๋๋๋ง๋ค ์ฌ์ด์ฆ๊ฐ ์์ดํ๋, ์๋ ์ ๋ ์ฌ์ด์ฆ๋ก ๊ตฌ๋งคํ๋ฉด ์ ๋ฉ๋๋ค.
- ์์ ์๋ฅ๋ฅผ ์ด ๋์๋ ๊ฐ์ด๋๋ ๋ณด๋ค ์ด์ฅ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ต๋๋ค.
- ์ฌ์ฑ๋ณต ์ค์์ ๋ง์ ๋๋ ๋์์ธ์ด ์์ผ๋ฉด L ์ด์ ์ฌ์ด์ฆ๋ ๊ตฌ๋งคํ์ ๋ ๋ง๊ธด ๋ง์ ๊ฒ๋๋ค.
- ํ๋ฆฌ์ฌ์ด์ฆ๋ ๋๋ถ๋ถ L ์๋๋ฉด M ์ฌ์ด์ฆ๋ ์ ์ผ๋ฉด ์์ ๊ฑฐ์์.
- ์ค๊ตฌ๋งค์์ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๋ ์ ๋ขฐํ ๋งํ๋, ์ ์ฐธ๊ณ ํ์ ์.
๋ฌด์ ์ฌ๊ฐ ์ ๊ณตํ ๋ค์ํ ์๋ฅ, ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ๊ฐ ์ฌ์ด์ฆ ์์ธก์ ๋์์ด ๋ ๋งํผ ์ํ๋ ์ฌ์ด์ฆ๋ฅผ ๊ตฌ๋งคํ ์ ์๋๋ก ๋์์ ์ฃผ์ง ์์๊น ์๊ฐํฉ๋๋ค. ๋ค๋ง, ์ ์ํ ์ ์ ๋ฌด์ ์ฌ์์ ์์งํ ์ ํ ์ค ๋๋ค์๊ฐ ๊ตญ๋ด ์คํธ๋ฆฟ ๋ธ๋๋์๊ธฐ ๋๋ฌธ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ์๋ฅ์ ์ผ๋ฐํํ๋ ๋ฐ ๋ฌด๋ฆฌ๊ฐ ์์์ ์ฐธ๊ณ ํด์ฃผ์ธ์. ๊ทธ๋ผ ๋ค์๋ฒ์๋ ํฅ๋ฏธ๋ก์ด ์ฃผ์ ๋ก ์ฐพ์์ค๊ฒ ์ต๋๋ค!
By ๋ด์ค์ ค๋ฆฌ ๊ฐ๋ฐํ