diff --git a/RFM.ipynb b/RFM.ipynb
new file mode 100644
index 0000000..88ce714
--- /dev/null
+++ b/RFM.ipynb
@@ -0,0 +1 @@
+{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"collapsed_sections":[],"authorship_tag":"ABX9TyMkK95h1xMQYViTtb0egePE"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["- 주어진 가상의 고객행동/구매 data를 가지고 사전 행동을 분석하고 EDA 결과 및 행동 특성에 따라 유형화(고객 sgmentation) 및 RFM Class Score 부여"],"metadata":{"id":"MdbgV4CZRElS"}},{"cell_type":"code","source":["import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import seaborn as sns"],"metadata":{"id":"zV7IOFHtXOwy"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"l_fAx2MdVnSY","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1666703924404,"user_tz":-540,"elapsed":18466,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"ea35ae2f-0e25-4d05-d664-a5d43586199a"},"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')\n","filename1 = '/content/drive/MyDrive/현대자동차2022/DM1_DS_99_HCKRTHN_CNTT_F.csv'\n","filename2 = '/content/drive/MyDrive/현대자동차2022/DM1_DS_99_HCKRTHN_DEMO_F.csv'\n","filename3 = '/content/drive/MyDrive/현대자동차2022/DM1_DS_99_HCKRTHN_PROS_ITG_F.csv'"]},{"cell_type":"code","source":["#차량 정보\n","carinfo_df = pd.read_csv(filename1,encoding='cp949')\n","#고객 접촉 이력 정보\n","cus = pd.read_csv(filename2,encoding='cp949')\n","#채널 인입 이력\n","inc = pd.read_csv(filename3,encoding='cp949')"],"metadata":{"id":"Fy0PbvH_WFN8"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["##데이터 전처리\n","\n","---\n","1. 해당되는 고객의 차량 계약 이력 및 정보\n","2. 1:n 관계로 다수의 차량 구매 이력\n"],"metadata":{"id":"gFDi-23kZYrH"}},{"cell_type":"code","source":["#차량 정보\n","carinfo_df = pd.read_csv(filename1,encoding='cp949')\n","carinfo_df.head(5)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"id":"80Zn924BZfSL","executionInfo":{"status":"ok","timestamp":1666703929915,"user_tz":-540,"elapsed":686,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"94cba308-48c0-4ed1-9482-6c5d10b563b5"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" CAR_ID CNTT_DT VEHL_CD DOM_MDL_NM \\\n","0 C98N3HQIS4G67 20210302 IG 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L \n","1 C18MB8E9FEO8O 20220117 M5 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n","2 CXMMZDI2JRWCX 20200511 DN 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 \n","3 C934SRCKF4H44 20220104 NX The all-new 투싼 하이브리드 인스퍼레이션 2WD A \n","4 CU1BBNUEHOTDM 20220210 JJ The All new G80 가솔린 2.5T AWD 19인치 \n","\n"," PAC_SCN_NM SALE_CGRD_NM SALE_TRIM_NM SALE_ENG_NM CUS_ID \n","0 승용 대형 PREMIUM 하이브리드 APW9ZIWDQQNYY8LK \n","1 소형상용 소형트럭 스타일 디젤 AGBCIS57DPHRRP9X \n","2 승용 중형 프리미엄 패밀리 가솔린 2.0 CVVL A4W2GG6ZLMZ81DB3 \n","3 RV 준중형SUV 인스퍼레이션 하이브리드 ATHNS3F4766FKDW3 \n","4 승용 대형 19인치A SDS2 가솔린 2.5T A8D7NHFKA3K83QH4 "],"text/html":["\n","
\n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," CAR_ID \n"," CNTT_DT \n"," VEHL_CD \n"," DOM_MDL_NM \n"," PAC_SCN_NM \n"," SALE_CGRD_NM \n"," SALE_TRIM_NM \n"," SALE_ENG_NM \n"," CUS_ID \n"," \n"," \n"," \n"," \n"," 0 \n"," C98N3HQIS4G67 \n"," 20210302 \n"," IG \n"," 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L \n"," 승용 \n"," 대형 \n"," PREMIUM \n"," 하이브리드 \n"," APW9ZIWDQQNYY8LK \n"," \n"," \n"," 1 \n"," C18MB8E9FEO8O \n"," 20220117 \n"," M5 \n"," 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n"," 소형상용 \n"," 소형트럭 \n"," 스타일 \n"," 디젤 \n"," AGBCIS57DPHRRP9X \n"," \n"," \n"," 2 \n"," CXMMZDI2JRWCX \n"," 20200511 \n"," DN \n"," 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 \n"," 승용 \n"," 중형 \n"," 프리미엄 패밀리 \n"," 가솔린 2.0 CVVL \n"," A4W2GG6ZLMZ81DB3 \n"," \n"," \n"," 3 \n"," C934SRCKF4H44 \n"," 20220104 \n"," NX \n"," The all-new 투싼 하이브리드 인스퍼레이션 2WD A \n"," RV \n"," 준중형SUV \n"," 인스퍼레이션 \n"," 하이브리드 \n"," ATHNS3F4766FKDW3 \n"," \n"," \n"," 4 \n"," CU1BBNUEHOTDM \n"," 20220210 \n"," JJ \n"," The All new G80 가솔린 2.5T AWD 19인치 \n"," 승용 \n"," 대형 \n"," 19인치A SDS2 \n"," 가솔린 2.5T \n"," A8D7NHFKA3K83QH4 \n"," \n"," \n","
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":4}]},{"cell_type":"code","source":["carinfo_df.rename(columns = {\n"," \"CAR_ID\":\"차량ID\",\n"," \"CNTT_DT\":\"계약일자\",\n"," \"VEHL_CD\":\"차종코드\",\n"," \"DOM_MDL_NM\":\"모델명\",\n"," \"PAC_SCN_NM\":\"승상구분명\",\n"," \"SALE_CGRD_NM\":\"판매차급명\",\n"," \"SALE_TRIM_NM\":\"판매트림명\",\n"," \"SALE_ENG_NM\":\"판매엔진명\",\n"," \"CUS_ID\":\"고객ID\",\n","}, inplace = True)\n","carinfo_df"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":424},"id":"nFBHk1bGbCiY","executionInfo":{"status":"ok","timestamp":1666703931218,"user_tz":-540,"elapsed":7,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"02927642-9aa7-435a-c2fd-5f320ec7f5f8"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 차량ID 계약일자 차종코드 모델명 승상구분명 \\\n","0 C98N3HQIS4G67 20210302 IG 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L 승용 \n","1 C18MB8E9FEO8O 20220117 M5 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY 소형상용 \n","2 CXMMZDI2JRWCX 20200511 DN 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 승용 \n","3 C934SRCKF4H44 20220104 NX The all-new 투싼 하이브리드 인스퍼레이션 2WD A RV \n","4 CU1BBNUEHOTDM 20220210 JJ The All new G80 가솔린 2.5T AWD 19인치 승용 \n","... ... ... ... ... ... \n","72780 CF5XYYWGM4962 20111025 MD 아반떼MD 자가용 가솔린 1.6 A 오토 11MY 승용 \n","72781 C91VRA1RAE6EL 20160504 TL 투싼TL 디젤 1.7 Premium 2WD DCT RV \n","72782 COAFAA0KQ2F1N 20220203 NX The all-new 투싼 하이브리드 프리미엄 2WD A/T RV \n","72783 COBZ4YAULMIMD 20100729 JA G스타렉스 디젤 12인승 웨건 자가용 CVX 오토 11MY 소형상용 \n","72784 CVJ1K1B9RQCRP 20180213 AE 아이오닉 자가용 하이브리드 N DCT 17MY 승용 \n","\n"," 판매차급명 판매트림명 판매엔진명 고객ID \n","0 대형 PREMIUM 하이브리드 APW9ZIWDQQNYY8LK \n","1 소형트럭 스타일 디젤 AGBCIS57DPHRRP9X \n","2 중형 프리미엄 패밀리 가솔린 2.0 CVVL A4W2GG6ZLMZ81DB3 \n","3 준중형SUV 인스퍼레이션 하이브리드 ATHNS3F4766FKDW3 \n","4 대형 19인치A SDS2 가솔린 2.5T A8D7NHFKA3K83QH4 \n","... ... ... ... ... \n","72780 준중형 A 가솔린 1.6 ACWSOYPRRWLHL2I1 \n","72781 준중형SUV Premium 디젤 1.7 ACWSOYPRRWLHL2I1 \n","72782 준중형SUV 프리미엄 하이브리드 AF3D2H4N6PO5PY24 \n","72783 소형버스 CVX 디젤 APXWMUKE36MD8PX1 \n","72784 준중형 N 하이브리드 AMFQZP101GIOOERA \n","\n","[72785 rows x 9 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 차량ID \n"," 계약일자 \n"," 차종코드 \n"," 모델명 \n"," 승상구분명 \n"," 판매차급명 \n"," 판매트림명 \n"," 판매엔진명 \n"," 고객ID \n"," \n"," \n"," \n"," \n"," 0 \n"," C98N3HQIS4G67 \n"," 20210302 \n"," IG \n"," 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L \n"," 승용 \n"," 대형 \n"," PREMIUM \n"," 하이브리드 \n"," APW9ZIWDQQNYY8LK \n"," \n"," \n"," 1 \n"," C18MB8E9FEO8O \n"," 20220117 \n"," M5 \n"," 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n"," 소형상용 \n"," 소형트럭 \n"," 스타일 \n"," 디젤 \n"," AGBCIS57DPHRRP9X \n"," \n"," \n"," 2 \n"," CXMMZDI2JRWCX \n"," 20200511 \n"," DN \n"," 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 \n"," 승용 \n"," 중형 \n"," 프리미엄 패밀리 \n"," 가솔린 2.0 CVVL \n"," A4W2GG6ZLMZ81DB3 \n"," \n"," \n"," 3 \n"," C934SRCKF4H44 \n"," 20220104 \n"," NX \n"," The all-new 투싼 하이브리드 인스퍼레이션 2WD A \n"," RV \n"," 준중형SUV \n"," 인스퍼레이션 \n"," 하이브리드 \n"," ATHNS3F4766FKDW3 \n"," \n"," \n"," 4 \n"," CU1BBNUEHOTDM \n"," 20220210 \n"," JJ \n"," The All new G80 가솔린 2.5T AWD 19인치 \n"," 승용 \n"," 대형 \n"," 19인치A SDS2 \n"," 가솔린 2.5T \n"," A8D7NHFKA3K83QH4 \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 72780 \n"," CF5XYYWGM4962 \n"," 20111025 \n"," MD \n"," 아반떼MD 자가용 가솔린 1.6 A 오토 11MY \n"," 승용 \n"," 준중형 \n"," A \n"," 가솔린 1.6 \n"," ACWSOYPRRWLHL2I1 \n"," \n"," \n"," 72781 \n"," C91VRA1RAE6EL \n"," 20160504 \n"," TL \n"," 투싼TL 디젤 1.7 Premium 2WD DCT \n"," RV \n"," 준중형SUV \n"," Premium \n"," 디젤 1.7 \n"," ACWSOYPRRWLHL2I1 \n"," \n"," \n"," 72782 \n"," COAFAA0KQ2F1N \n"," 20220203 \n"," NX \n"," The all-new 투싼 하이브리드 프리미엄 2WD A/T \n"," RV \n"," 준중형SUV \n"," 프리미엄 \n"," 하이브리드 \n"," AF3D2H4N6PO5PY24 \n"," \n"," \n"," 72783 \n"," COBZ4YAULMIMD \n"," 20100729 \n"," JA \n"," G스타렉스 디젤 12인승 웨건 자가용 CVX 오토 11MY \n"," 소형상용 \n"," 소형버스 \n"," CVX \n"," 디젤 \n"," APXWMUKE36MD8PX1 \n"," \n"," \n"," 72784 \n"," CVJ1K1B9RQCRP \n"," 20180213 \n"," AE \n"," 아이오닉 자가용 하이브리드 N DCT 17MY \n"," 승용 \n"," 준중형 \n"," N \n"," 하이브리드 \n"," AMFQZP101GIOOERA \n"," \n"," \n","
\n","
72785 rows × 9 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":5}]},{"cell_type":"code","source":["##cus df 열 변경\n","cus.rename(columns = {\n"," \"CUS_ID\":\"고객ID\",\n"," \"PSN_BIZR_YN\":\"개인사업자여부\",\n"," \"TYMD\":\"생년\",\n"," \"SEX_SCN_NM\":\"성별구분명\",\n","}, inplace = True)\n","cus"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":424},"id":"F14UPtedQG9z","executionInfo":{"status":"ok","timestamp":1666703933748,"user_tz":-540,"elapsed":289,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"ade09eb9-feed-4ba8-d737-9d3a361f66ad"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 고객ID 개인사업자여부 생년 성별구분명\n","0 AMR9MOP756HN28V9 N 1990.0 여자\n","1 AL2E2HLDMN50FN9E N 1955.0 남자\n","2 APW9ZIWDQQNYY8LK N 1992.0 남자\n","3 AGBCIS57DPHRRP9X N 1977.0 남자\n","4 A4W2GG6ZLMZ81DB3 N 1974.0 여자\n","... ... ... ... ...\n","89575 AF3D2H4N6PO5PY24 N 1968.0 남자\n","89576 AQSF1UNGCVX5CVJH N 1984.0 남자\n","89577 ARJA0WA3EEXVZQFW N 1982.0 남자\n","89578 APXWMUKE36MD8PX1 N 1984.0 남자\n","89579 AMFQZP101GIOOERA N 1980.0 남자\n","\n","[89580 rows x 4 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 고객ID \n"," 개인사업자여부 \n"," 생년 \n"," 성별구분명 \n"," \n"," \n"," \n"," \n"," 0 \n"," AMR9MOP756HN28V9 \n"," N \n"," 1990.0 \n"," 여자 \n"," \n"," \n"," 1 \n"," AL2E2HLDMN50FN9E \n"," N \n"," 1955.0 \n"," 남자 \n"," \n"," \n"," 2 \n"," APW9ZIWDQQNYY8LK \n"," N \n"," 1992.0 \n"," 남자 \n"," \n"," \n"," 3 \n"," AGBCIS57DPHRRP9X \n"," N \n"," 1977.0 \n"," 남자 \n"," \n"," \n"," 4 \n"," A4W2GG6ZLMZ81DB3 \n"," N \n"," 1974.0 \n"," 여자 \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 89575 \n"," AF3D2H4N6PO5PY24 \n"," N \n"," 1968.0 \n"," 남자 \n"," \n"," \n"," 89576 \n"," AQSF1UNGCVX5CVJH \n"," N \n"," 1984.0 \n"," 남자 \n"," \n"," \n"," 89577 \n"," ARJA0WA3EEXVZQFW \n"," N \n"," 1982.0 \n"," 남자 \n"," \n"," \n"," 89578 \n"," APXWMUKE36MD8PX1 \n"," N \n"," 1984.0 \n"," 남자 \n"," \n"," \n"," 89579 \n"," AMFQZP101GIOOERA \n"," N \n"," 1980.0 \n"," 남자 \n"," \n"," \n","
\n","
89580 rows × 4 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":6}]},{"cell_type":"code","source":["##inc df 열 변경\n","inc.rename(columns = {\n"," \"CUS_ID\":\"고객ID\",\n"," \"CASE_ID\":\"접촉ID\",\n"," \"INP_DTM\":\"인입일시\",\n"," \"CHAN_SCN_NM\":\"채널구분명\",\n"," \"CHAN_DTL_SCN_NM\":\"채널상세구분명\",\n"," \"IRD_VEHL_CD\":\"관심차량\",\n","}, inplace = True)\n","inc"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":424},"id":"Q66brc5vQMS8","executionInfo":{"status":"ok","timestamp":1666703938661,"user_tz":-540,"elapsed":290,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"ed61db13-cd7e-45d6-ca74-3571b00406dd"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 고객ID 접촉ID 인입일시 채널구분명 \\\n","0 AKZWMZWJ3HTYTOSS BK69SK0W9NOEXIQU 2022-01-09 16:00:00 시승시스템 \n","1 AAMN599HM0XFRIRK BCPT4WL1QHD8LK1M 2022-01-12 10:00:00 시승시스템 \n","2 AP8ERGN3MGXWD0W1 BUYAFEX9M7PATNIF 2022-01-09 18:41:28 현대닷컴 \n","3 ASIYQ5LM878U45P5 BVCR9MK9FIRXEUCL 2022-01-11 18:41:21 이벤트시스템 \n","4 A8KWVKZPITWG0PCO BNQ8X4SUSC120MRF 2022-01-10 09:03:09 판매기회_상담완료 \n","... ... ... ... ... \n","159166 AS7OEWKWHIAK2WZ1 BS94L650O9PWIXE1 2022-03-07 18:09:35 판매기회_상담완료 \n","159167 AVFD9EAOXP2BYXQY BIL593DS4LTUT2JP 2022-02-03 10:23:16 판매기회_상담완료 \n","159168 AA9FVJGB2L5OG3IW B26O6YSJL6XOIHIZ 2022-03-14 11:05:38 판매기회_상담완료 \n","159169 AIJ2KUXDXEV0VDUS BXQDUBABH92L3XOQ 2022-05-09 10:04:17 판매기회_상담완료 \n","159170 AMJX3PS4HG70WXLA BU3VXVVBH08FAOQM 2022-06-09 11:10:14 판매기회_상담완료 \n","\n"," 채널상세구분명 관심차량 \n","0 시승 JW \n","1 시승 QX \n","2 견적 NX \n","3 구매상담신청 NaN \n","4 지속관리 JJ \n","... ... ... \n","159166 지속관리 NX \n","159167 지속관리 NaN \n","159168 지속관리 LC \n","159169 지속관리 NaN \n","159170 지속관리 NaN \n","\n","[159171 rows x 6 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 고객ID \n"," 접촉ID \n"," 인입일시 \n"," 채널구분명 \n"," 채널상세구분명 \n"," 관심차량 \n"," \n"," \n"," \n"," \n"," 0 \n"," AKZWMZWJ3HTYTOSS \n"," BK69SK0W9NOEXIQU \n"," 2022-01-09 16:00:00 \n"," 시승시스템 \n"," 시승 \n"," JW \n"," \n"," \n"," 1 \n"," AAMN599HM0XFRIRK \n"," BCPT4WL1QHD8LK1M \n"," 2022-01-12 10:00:00 \n"," 시승시스템 \n"," 시승 \n"," QX \n"," \n"," \n"," 2 \n"," AP8ERGN3MGXWD0W1 \n"," BUYAFEX9M7PATNIF \n"," 2022-01-09 18:41:28 \n"," 현대닷컴 \n"," 견적 \n"," NX \n"," \n"," \n"," 3 \n"," ASIYQ5LM878U45P5 \n"," BVCR9MK9FIRXEUCL \n"," 2022-01-11 18:41:21 \n"," 이벤트시스템 \n"," 구매상담신청 \n"," NaN \n"," \n"," \n"," 4 \n"," A8KWVKZPITWG0PCO \n"," BNQ8X4SUSC120MRF \n"," 2022-01-10 09:03:09 \n"," 판매기회_상담완료 \n"," 지속관리 \n"," JJ \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 159166 \n"," AS7OEWKWHIAK2WZ1 \n"," BS94L650O9PWIXE1 \n"," 2022-03-07 18:09:35 \n"," 판매기회_상담완료 \n"," 지속관리 \n"," NX \n"," \n"," \n"," 159167 \n"," AVFD9EAOXP2BYXQY \n"," BIL593DS4LTUT2JP \n"," 2022-02-03 10:23:16 \n"," 판매기회_상담완료 \n"," 지속관리 \n"," NaN \n"," \n"," \n"," 159168 \n"," AA9FVJGB2L5OG3IW \n"," B26O6YSJL6XOIHIZ \n"," 2022-03-14 11:05:38 \n"," 판매기회_상담완료 \n"," 지속관리 \n"," LC \n"," \n"," \n"," 159169 \n"," AIJ2KUXDXEV0VDUS \n"," BXQDUBABH92L3XOQ \n"," 2022-05-09 10:04:17 \n"," 판매기회_상담완료 \n"," 지속관리 \n"," NaN \n"," \n"," \n"," 159170 \n"," AMJX3PS4HG70WXLA \n"," BU3VXVVBH08FAOQM \n"," 2022-06-09 11:10:14 \n"," 판매기회_상담완료 \n"," 지속관리 \n"," NaN \n"," \n"," \n","
\n","
159171 rows × 6 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":7}]},{"cell_type":"code","source":["inc_1 = inc[['고객ID','채널구분명','관심차량']]"],"metadata":{"id":"Vlr7XK2GQg60"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["carinfo_df.isna().any()"],"metadata":{"id":"thHLefM8e9l4","executionInfo":{"status":"ok","timestamp":1666279508069,"user_tz":-540,"elapsed":504,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"efc7c744-bcf8-4474-9fed-bb100028bc01"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["차량ID False\n","계약일자 False\n","차종코드 False\n","모델명 False\n","승상구분명 False\n","판매차급명 False\n","판매트림명 True\n","판매엔진명 True\n","고객ID False\n","dtype: bool"]},"metadata":{},"execution_count":6}]},{"cell_type":"code","source":["carinfo_df.isnull().sum()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8R2mDPU7Rcts","executionInfo":{"status":"ok","timestamp":1666279510239,"user_tz":-540,"elapsed":6,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"c9918c3d-28b6-4fc5-88fb-f459a1f72e3a"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["차량ID 0\n","계약일자 0\n","차종코드 0\n","모델명 0\n","승상구분명 0\n","판매차급명 0\n","판매트림명 11\n","판매엔진명 73\n","고객ID 0\n","dtype: int64"]},"metadata":{},"execution_count":7}]},{"cell_type":"code","source":["#데이터의 고유치 갯수\n","carinfo_df.nunique()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"tYFdzlEMy2Ef","executionInfo":{"status":"ok","timestamp":1666279512639,"user_tz":-540,"elapsed":4,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"fe688305-943b-4d45-8773-71102c321421"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["차량ID 72785\n","계약일자 3713\n","차종코드 59\n","모델명 2515\n","승상구분명 3\n","판매차급명 12\n","판매트림명 326\n","판매엔진명 79\n","고객ID 51397\n","dtype: int64"]},"metadata":{},"execution_count":8}]},{"cell_type":"code","source":["carinfo_df.info()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"5eCtUvQtomgv","executionInfo":{"status":"ok","timestamp":1666279516791,"user_tz":-540,"elapsed":401,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"6113fa25-27ce-4e4a-f747-ef5b1ee40b86"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","RangeIndex: 72785 entries, 0 to 72784\n","Data columns (total 9 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 차량ID 72785 non-null object\n"," 1 계약일자 72785 non-null int64 \n"," 2 차종코드 72785 non-null object\n"," 3 모델명 72785 non-null object\n"," 4 승상구분명 72785 non-null object\n"," 5 판매차급명 72785 non-null object\n"," 6 판매트림명 72774 non-null object\n"," 7 판매엔진명 72712 non-null object\n"," 8 고객ID 72785 non-null object\n","dtypes: int64(1), object(8)\n","memory usage: 5.0+ MB\n"]}]},{"cell_type":"code","source":["import datetime\n","carinfo_df['계약일자'] = carinfo_df['계약일자'].astype('str')\n","carinfo_df['계약일자'] = carinfo_df['계약일자'].apply(lambda _ : datetime.datetime.strptime(_,'%Y%m%d'))"],"metadata":{"id":"pI-ae05graYi"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["carinfo_df"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":424},"id":"2gLKmpufsNpd","executionInfo":{"status":"ok","timestamp":1666703950668,"user_tz":-540,"elapsed":8,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"d2c66181-c637-485a-c427-6382f33b8cd4"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 차량ID 계약일자 차종코드 모델명 승상구분명 \\\n","0 C98N3HQIS4G67 2021-03-02 IG 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L 승용 \n","1 C18MB8E9FEO8O 2022-01-17 M5 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY 소형상용 \n","2 CXMMZDI2JRWCX 2020-05-11 DN 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 승용 \n","3 C934SRCKF4H44 2022-01-04 NX The all-new 투싼 하이브리드 인스퍼레이션 2WD A RV \n","4 CU1BBNUEHOTDM 2022-02-10 JJ The All new G80 가솔린 2.5T AWD 19인치 승용 \n","... ... ... ... ... ... \n","72780 CF5XYYWGM4962 2011-10-25 MD 아반떼MD 자가용 가솔린 1.6 A 오토 11MY 승용 \n","72781 C91VRA1RAE6EL 2016-05-04 TL 투싼TL 디젤 1.7 Premium 2WD DCT RV \n","72782 COAFAA0KQ2F1N 2022-02-03 NX The all-new 투싼 하이브리드 프리미엄 2WD A/T RV \n","72783 COBZ4YAULMIMD 2010-07-29 JA G스타렉스 디젤 12인승 웨건 자가용 CVX 오토 11MY 소형상용 \n","72784 CVJ1K1B9RQCRP 2018-02-13 AE 아이오닉 자가용 하이브리드 N DCT 17MY 승용 \n","\n"," 판매차급명 판매트림명 판매엔진명 고객ID \n","0 대형 PREMIUM 하이브리드 APW9ZIWDQQNYY8LK \n","1 소형트럭 스타일 디젤 AGBCIS57DPHRRP9X \n","2 중형 프리미엄 패밀리 가솔린 2.0 CVVL A4W2GG6ZLMZ81DB3 \n","3 준중형SUV 인스퍼레이션 하이브리드 ATHNS3F4766FKDW3 \n","4 대형 19인치A SDS2 가솔린 2.5T A8D7NHFKA3K83QH4 \n","... ... ... ... ... \n","72780 준중형 A 가솔린 1.6 ACWSOYPRRWLHL2I1 \n","72781 준중형SUV Premium 디젤 1.7 ACWSOYPRRWLHL2I1 \n","72782 준중형SUV 프리미엄 하이브리드 AF3D2H4N6PO5PY24 \n","72783 소형버스 CVX 디젤 APXWMUKE36MD8PX1 \n","72784 준중형 N 하이브리드 AMFQZP101GIOOERA \n","\n","[72785 rows x 9 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 차량ID \n"," 계약일자 \n"," 차종코드 \n"," 모델명 \n"," 승상구분명 \n"," 판매차급명 \n"," 판매트림명 \n"," 판매엔진명 \n"," 고객ID \n"," \n"," \n"," \n"," \n"," 0 \n"," C98N3HQIS4G67 \n"," 2021-03-02 \n"," IG \n"," 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L \n"," 승용 \n"," 대형 \n"," PREMIUM \n"," 하이브리드 \n"," APW9ZIWDQQNYY8LK \n"," \n"," \n"," 1 \n"," C18MB8E9FEO8O \n"," 2022-01-17 \n"," M5 \n"," 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n"," 소형상용 \n"," 소형트럭 \n"," 스타일 \n"," 디젤 \n"," AGBCIS57DPHRRP9X \n"," \n"," \n"," 2 \n"," CXMMZDI2JRWCX \n"," 2020-05-11 \n"," DN \n"," 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 \n"," 승용 \n"," 중형 \n"," 프리미엄 패밀리 \n"," 가솔린 2.0 CVVL \n"," A4W2GG6ZLMZ81DB3 \n"," \n"," \n"," 3 \n"," C934SRCKF4H44 \n"," 2022-01-04 \n"," NX \n"," The all-new 투싼 하이브리드 인스퍼레이션 2WD A \n"," RV \n"," 준중형SUV \n"," 인스퍼레이션 \n"," 하이브리드 \n"," ATHNS3F4766FKDW3 \n"," \n"," \n"," 4 \n"," CU1BBNUEHOTDM \n"," 2022-02-10 \n"," JJ \n"," The All new G80 가솔린 2.5T AWD 19인치 \n"," 승용 \n"," 대형 \n"," 19인치A SDS2 \n"," 가솔린 2.5T \n"," A8D7NHFKA3K83QH4 \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 72780 \n"," CF5XYYWGM4962 \n"," 2011-10-25 \n"," MD \n"," 아반떼MD 자가용 가솔린 1.6 A 오토 11MY \n"," 승용 \n"," 준중형 \n"," A \n"," 가솔린 1.6 \n"," ACWSOYPRRWLHL2I1 \n"," \n"," \n"," 72781 \n"," C91VRA1RAE6EL \n"," 2016-05-04 \n"," TL \n"," 투싼TL 디젤 1.7 Premium 2WD DCT \n"," RV \n"," 준중형SUV \n"," Premium \n"," 디젤 1.7 \n"," ACWSOYPRRWLHL2I1 \n"," \n"," \n"," 72782 \n"," COAFAA0KQ2F1N \n"," 2022-02-03 \n"," NX \n"," The all-new 투싼 하이브리드 프리미엄 2WD A/T \n"," RV \n"," 준중형SUV \n"," 프리미엄 \n"," 하이브리드 \n"," AF3D2H4N6PO5PY24 \n"," \n"," \n"," 72783 \n"," COBZ4YAULMIMD \n"," 2010-07-29 \n"," JA \n"," G스타렉스 디젤 12인승 웨건 자가용 CVX 오토 11MY \n"," 소형상용 \n"," 소형버스 \n"," CVX \n"," 디젤 \n"," APXWMUKE36MD8PX1 \n"," \n"," \n"," 72784 \n"," CVJ1K1B9RQCRP \n"," 2018-02-13 \n"," AE \n"," 아이오닉 자가용 하이브리드 N DCT 17MY \n"," 승용 \n"," 준중형 \n"," N \n"," 하이브리드 \n"," AMFQZP101GIOOERA \n"," \n"," \n","
\n","
72785 rows × 9 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":10}]},{"cell_type":"code","source":["new_df = pd.merge(carinfo_df, cus, left_on='고객ID',right_on='고객ID')\n","new_df"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":624},"id":"I2RUjO0YYiIX","executionInfo":{"status":"ok","timestamp":1666703954128,"user_tz":-540,"elapsed":511,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"01215d65-aa2f-44ae-e103-6856811648c6"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 차량ID 계약일자 차종코드 모델명 승상구분명 \\\n","0 C98N3HQIS4G67 2021-03-02 IG 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L 승용 \n","1 C18MB8E9FEO8O 2022-01-17 M5 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY 소형상용 \n","2 CXMMZDI2JRWCX 2020-05-11 DN 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 승용 \n","3 C934SRCKF4H44 2022-01-04 NX The all-new 투싼 하이브리드 인스퍼레이션 2WD A RV \n","4 CU1BBNUEHOTDM 2022-02-10 JJ The All new G80 가솔린 2.5T AWD 19인치 승용 \n","... ... ... ... ... ... \n","71056 CF5XYYWGM4962 2011-10-25 MD 아반떼MD 자가용 가솔린 1.6 A 오토 11MY 승용 \n","71057 C91VRA1RAE6EL 2016-05-04 TL 투싼TL 디젤 1.7 Premium 2WD DCT RV \n","71058 COAFAA0KQ2F1N 2022-02-03 NX The all-new 투싼 하이브리드 프리미엄 2WD A/T RV \n","71059 COBZ4YAULMIMD 2010-07-29 JA G스타렉스 디젤 12인승 웨건 자가용 CVX 오토 11MY 소형상용 \n","71060 CVJ1K1B9RQCRP 2018-02-13 AE 아이오닉 자가용 하이브리드 N DCT 17MY 승용 \n","\n"," 판매차급명 판매트림명 판매엔진명 고객ID 개인사업자여부 생년 \\\n","0 대형 PREMIUM 하이브리드 APW9ZIWDQQNYY8LK N 1992.0 \n","1 소형트럭 스타일 디젤 AGBCIS57DPHRRP9X N 1977.0 \n","2 중형 프리미엄 패밀리 가솔린 2.0 CVVL A4W2GG6ZLMZ81DB3 N 1974.0 \n","3 준중형SUV 인스퍼레이션 하이브리드 ATHNS3F4766FKDW3 N 1981.0 \n","4 대형 19인치A SDS2 가솔린 2.5T A8D7NHFKA3K83QH4 N 1965.0 \n","... ... ... ... ... ... ... \n","71056 준중형 A 가솔린 1.6 ACWSOYPRRWLHL2I1 N 1979.0 \n","71057 준중형SUV Premium 디젤 1.7 ACWSOYPRRWLHL2I1 N 1979.0 \n","71058 준중형SUV 프리미엄 하이브리드 AF3D2H4N6PO5PY24 N 1968.0 \n","71059 소형버스 CVX 디젤 APXWMUKE36MD8PX1 N 1984.0 \n","71060 준중형 N 하이브리드 AMFQZP101GIOOERA N 1980.0 \n","\n"," 성별구분명 \n","0 남자 \n","1 남자 \n","2 여자 \n","3 여자 \n","4 여자 \n","... ... \n","71056 남자 \n","71057 남자 \n","71058 남자 \n","71059 남자 \n","71060 남자 \n","\n","[71061 rows x 12 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 차량ID \n"," 계약일자 \n"," 차종코드 \n"," 모델명 \n"," 승상구분명 \n"," 판매차급명 \n"," 판매트림명 \n"," 판매엔진명 \n"," 고객ID \n"," 개인사업자여부 \n"," 생년 \n"," 성별구분명 \n"," \n"," \n"," \n"," \n"," 0 \n"," C98N3HQIS4G67 \n"," 2021-03-02 \n"," IG \n"," 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L \n"," 승용 \n"," 대형 \n"," PREMIUM \n"," 하이브리드 \n"," APW9ZIWDQQNYY8LK \n"," N \n"," 1992.0 \n"," 남자 \n"," \n"," \n"," 1 \n"," C18MB8E9FEO8O \n"," 2022-01-17 \n"," M5 \n"," 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n"," 소형상용 \n"," 소형트럭 \n"," 스타일 \n"," 디젤 \n"," AGBCIS57DPHRRP9X \n"," N \n"," 1977.0 \n"," 남자 \n"," \n"," \n"," 2 \n"," CXMMZDI2JRWCX \n"," 2020-05-11 \n"," DN \n"," 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 \n"," 승용 \n"," 중형 \n"," 프리미엄 패밀리 \n"," 가솔린 2.0 CVVL \n"," A4W2GG6ZLMZ81DB3 \n"," N \n"," 1974.0 \n"," 여자 \n"," \n"," \n"," 3 \n"," C934SRCKF4H44 \n"," 2022-01-04 \n"," NX \n"," The all-new 투싼 하이브리드 인스퍼레이션 2WD A \n"," RV \n"," 준중형SUV \n"," 인스퍼레이션 \n"," 하이브리드 \n"," ATHNS3F4766FKDW3 \n"," N \n"," 1981.0 \n"," 여자 \n"," \n"," \n"," 4 \n"," CU1BBNUEHOTDM \n"," 2022-02-10 \n"," JJ \n"," The All new G80 가솔린 2.5T AWD 19인치 \n"," 승용 \n"," 대형 \n"," 19인치A SDS2 \n"," 가솔린 2.5T \n"," A8D7NHFKA3K83QH4 \n"," N \n"," 1965.0 \n"," 여자 \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 71056 \n"," CF5XYYWGM4962 \n"," 2011-10-25 \n"," MD \n"," 아반떼MD 자가용 가솔린 1.6 A 오토 11MY \n"," 승용 \n"," 준중형 \n"," A \n"," 가솔린 1.6 \n"," ACWSOYPRRWLHL2I1 \n"," N \n"," 1979.0 \n"," 남자 \n"," \n"," \n"," 71057 \n"," C91VRA1RAE6EL \n"," 2016-05-04 \n"," TL \n"," 투싼TL 디젤 1.7 Premium 2WD DCT \n"," RV \n"," 준중형SUV \n"," Premium \n"," 디젤 1.7 \n"," ACWSOYPRRWLHL2I1 \n"," N \n"," 1979.0 \n"," 남자 \n"," \n"," \n"," 71058 \n"," COAFAA0KQ2F1N \n"," 2022-02-03 \n"," NX \n"," The all-new 투싼 하이브리드 프리미엄 2WD A/T \n"," RV \n"," 준중형SUV \n"," 프리미엄 \n"," 하이브리드 \n"," AF3D2H4N6PO5PY24 \n"," N \n"," 1968.0 \n"," 남자 \n"," \n"," \n"," 71059 \n"," COBZ4YAULMIMD \n"," 2010-07-29 \n"," JA \n"," G스타렉스 디젤 12인승 웨건 자가용 CVX 오토 11MY \n"," 소형상용 \n"," 소형버스 \n"," CVX \n"," 디젤 \n"," APXWMUKE36MD8PX1 \n"," N \n"," 1984.0 \n"," 남자 \n"," \n"," \n"," 71060 \n"," CVJ1K1B9RQCRP \n"," 2018-02-13 \n"," AE \n"," 아이오닉 자가용 하이브리드 N DCT 17MY \n"," 승용 \n"," 준중형 \n"," N \n"," 하이브리드 \n"," AMFQZP101GIOOERA \n"," N \n"," 1980.0 \n"," 남자 \n"," \n"," \n","
\n","
71061 rows × 12 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":11}]},{"cell_type":"code","source":["inc_1"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":424},"id":"YsOosxtRZazm","executionInfo":{"status":"ok","timestamp":1666703959251,"user_tz":-540,"elapsed":273,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"b861ea50-8a83-4e49-acfa-174b9f79ad8a"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 고객ID 채널구분명 관심차량\n","0 AKZWMZWJ3HTYTOSS 시승시스템 JW\n","1 AAMN599HM0XFRIRK 시승시스템 QX\n","2 AP8ERGN3MGXWD0W1 현대닷컴 NX\n","3 ASIYQ5LM878U45P5 이벤트시스템 NaN\n","4 A8KWVKZPITWG0PCO 판매기회_상담완료 JJ\n","... ... ... ...\n","159166 AS7OEWKWHIAK2WZ1 판매기회_상담완료 NX\n","159167 AVFD9EAOXP2BYXQY 판매기회_상담완료 NaN\n","159168 AA9FVJGB2L5OG3IW 판매기회_상담완료 LC\n","159169 AIJ2KUXDXEV0VDUS 판매기회_상담완료 NaN\n","159170 AMJX3PS4HG70WXLA 판매기회_상담완료 NaN\n","\n","[159171 rows x 3 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 고객ID \n"," 채널구분명 \n"," 관심차량 \n"," \n"," \n"," \n"," \n"," 0 \n"," AKZWMZWJ3HTYTOSS \n"," 시승시스템 \n"," JW \n"," \n"," \n"," 1 \n"," AAMN599HM0XFRIRK \n"," 시승시스템 \n"," QX \n"," \n"," \n"," 2 \n"," AP8ERGN3MGXWD0W1 \n"," 현대닷컴 \n"," NX \n"," \n"," \n"," 3 \n"," ASIYQ5LM878U45P5 \n"," 이벤트시스템 \n"," NaN \n"," \n"," \n"," 4 \n"," A8KWVKZPITWG0PCO \n"," 판매기회_상담완료 \n"," JJ \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 159166 \n"," AS7OEWKWHIAK2WZ1 \n"," 판매기회_상담완료 \n"," NX \n"," \n"," \n"," 159167 \n"," AVFD9EAOXP2BYXQY \n"," 판매기회_상담완료 \n"," NaN \n"," \n"," \n"," 159168 \n"," AA9FVJGB2L5OG3IW \n"," 판매기회_상담완료 \n"," LC \n"," \n"," \n"," 159169 \n"," AIJ2KUXDXEV0VDUS \n"," 판매기회_상담완료 \n"," NaN \n"," \n"," \n"," 159170 \n"," AMJX3PS4HG70WXLA \n"," 판매기회_상담완료 \n"," NaN \n"," \n"," \n","
\n","
159171 rows × 3 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":12}]},{"cell_type":"code","source":["df = pd.merge(new_df, inc_1 , left_on='고객ID', right_on='고객ID')\n","df"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":659},"id":"MHPRMHH9ZKcj","executionInfo":{"status":"ok","timestamp":1666703962345,"user_tz":-540,"elapsed":569,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"e8740b7f-72e8-403d-bcfb-cd96c5ff611f"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 차량ID 계약일자 차종코드 모델명 \\\n","0 C98N3HQIS4G67 2021-03-02 IG 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L \n","1 C18MB8E9FEO8O 2022-01-17 M5 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n","2 C18MB8E9FEO8O 2022-01-17 M5 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n","3 C18MB8E9FEO8O 2022-01-17 M5 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n","4 CXMMZDI2JRWCX 2020-05-11 DN 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 \n","... ... ... ... ... \n","126543 CF5XYYWGM4962 2011-10-25 MD 아반떼MD 자가용 가솔린 1.6 A 오토 11MY \n","126544 C91VRA1RAE6EL 2016-05-04 TL 투싼TL 디젤 1.7 Premium 2WD DCT \n","126545 COAFAA0KQ2F1N 2022-02-03 NX The all-new 투싼 하이브리드 프리미엄 2WD A/T \n","126546 COBZ4YAULMIMD 2010-07-29 JA G스타렉스 디젤 12인승 웨건 자가용 CVX 오토 11MY \n","126547 CVJ1K1B9RQCRP 2018-02-13 AE 아이오닉 자가용 하이브리드 N DCT 17MY \n","\n"," 승상구분명 판매차급명 판매트림명 판매엔진명 고객ID 개인사업자여부 \\\n","0 승용 대형 PREMIUM 하이브리드 APW9ZIWDQQNYY8LK N \n","1 소형상용 소형트럭 스타일 디젤 AGBCIS57DPHRRP9X N \n","2 소형상용 소형트럭 스타일 디젤 AGBCIS57DPHRRP9X N \n","3 소형상용 소형트럭 스타일 디젤 AGBCIS57DPHRRP9X N \n","4 승용 중형 프리미엄 패밀리 가솔린 2.0 CVVL A4W2GG6ZLMZ81DB3 N \n","... ... ... ... ... ... ... \n","126543 승용 준중형 A 가솔린 1.6 ACWSOYPRRWLHL2I1 N \n","126544 RV 준중형SUV Premium 디젤 1.7 ACWSOYPRRWLHL2I1 N \n","126545 RV 준중형SUV 프리미엄 하이브리드 AF3D2H4N6PO5PY24 N \n","126546 소형상용 소형버스 CVX 디젤 APXWMUKE36MD8PX1 N \n","126547 승용 준중형 N 하이브리드 AMFQZP101GIOOERA N \n","\n"," 생년 성별구분명 채널구분명 관심차량 \n","0 1992.0 남자 시승시스템 IG \n","1 1977.0 남자 현대닷컴 M5 \n","2 1977.0 남자 현대닷컴 M5 \n","3 1977.0 남자 현대닷컴 M5 \n","4 1974.0 여자 시승시스템 CN \n","... ... ... ... ... \n","126543 1979.0 남자 판매기회_상담완료 IG \n","126544 1979.0 남자 판매기회_상담완료 IG \n","126545 1968.0 남자 판매기회_상담완료 NX \n","126546 1984.0 남자 판매기회_상담완료 WR \n","126547 1980.0 남자 판매기회_상담완료 NaN \n","\n","[126548 rows x 14 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 차량ID \n"," 계약일자 \n"," 차종코드 \n"," 모델명 \n"," 승상구분명 \n"," 판매차급명 \n"," 판매트림명 \n"," 판매엔진명 \n"," 고객ID \n"," 개인사업자여부 \n"," 생년 \n"," 성별구분명 \n"," 채널구분명 \n"," 관심차량 \n"," \n"," \n"," \n"," \n"," 0 \n"," C98N3HQIS4G67 \n"," 2021-03-02 \n"," IG \n"," 그랜저IG 자가용 하이브리드 PREMIUM A/T F/L \n"," 승용 \n"," 대형 \n"," PREMIUM \n"," 하이브리드 \n"," APW9ZIWDQQNYY8LK \n"," N \n"," 1992.0 \n"," 남자 \n"," 시승시스템 \n"," IG \n"," \n"," \n"," 1 \n"," C18MB8E9FEO8O \n"," 2022-01-17 \n"," M5 \n"," 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n"," 소형상용 \n"," 소형트럭 \n"," 스타일 \n"," 디젤 \n"," AGBCIS57DPHRRP9X \n"," N \n"," 1977.0 \n"," 남자 \n"," 현대닷컴 \n"," M5 \n"," \n"," \n"," 2 \n"," C18MB8E9FEO8O \n"," 2022-01-17 \n"," M5 \n"," 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n"," 소형상용 \n"," 소형트럭 \n"," 스타일 \n"," 디젤 \n"," AGBCIS57DPHRRP9X \n"," N \n"," 1977.0 \n"," 남자 \n"," 현대닷컴 \n"," M5 \n"," \n"," \n"," 3 \n"," C18MB8E9FEO8O \n"," 2022-01-17 \n"," M5 \n"," 포터II 디젤 슈퍼캡 초장축 카고 스타일 매뉴얼 22MY \n"," 소형상용 \n"," 소형트럭 \n"," 스타일 \n"," 디젤 \n"," AGBCIS57DPHRRP9X \n"," N \n"," 1977.0 \n"," 남자 \n"," 현대닷컴 \n"," M5 \n"," \n"," \n"," 4 \n"," CXMMZDI2JRWCX \n"," 2020-05-11 \n"," DN \n"," 쏘나타DN8 20MY 자가용 가솔린 2.0 CVVL 프리미엄 \n"," 승용 \n"," 중형 \n"," 프리미엄 패밀리 \n"," 가솔린 2.0 CVVL \n"," A4W2GG6ZLMZ81DB3 \n"," N \n"," 1974.0 \n"," 여자 \n"," 시승시스템 \n"," CN \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 126543 \n"," CF5XYYWGM4962 \n"," 2011-10-25 \n"," MD \n"," 아반떼MD 자가용 가솔린 1.6 A 오토 11MY \n"," 승용 \n"," 준중형 \n"," A \n"," 가솔린 1.6 \n"," ACWSOYPRRWLHL2I1 \n"," N \n"," 1979.0 \n"," 남자 \n"," 판매기회_상담완료 \n"," IG \n"," \n"," \n"," 126544 \n"," C91VRA1RAE6EL \n"," 2016-05-04 \n"," TL \n"," 투싼TL 디젤 1.7 Premium 2WD DCT \n"," RV \n"," 준중형SUV \n"," Premium \n"," 디젤 1.7 \n"," ACWSOYPRRWLHL2I1 \n"," N \n"," 1979.0 \n"," 남자 \n"," 판매기회_상담완료 \n"," IG \n"," \n"," \n"," 126545 \n"," COAFAA0KQ2F1N \n"," 2022-02-03 \n"," NX \n"," The all-new 투싼 하이브리드 프리미엄 2WD A/T \n"," RV \n"," 준중형SUV \n"," 프리미엄 \n"," 하이브리드 \n"," AF3D2H4N6PO5PY24 \n"," N \n"," 1968.0 \n"," 남자 \n"," 판매기회_상담완료 \n"," NX \n"," \n"," \n"," 126546 \n"," COBZ4YAULMIMD \n"," 2010-07-29 \n"," JA \n"," G스타렉스 디젤 12인승 웨건 자가용 CVX 오토 11MY \n"," 소형상용 \n"," 소형버스 \n"," CVX \n"," 디젤 \n"," APXWMUKE36MD8PX1 \n"," N \n"," 1984.0 \n"," 남자 \n"," 판매기회_상담완료 \n"," WR \n"," \n"," \n"," 126547 \n"," CVJ1K1B9RQCRP \n"," 2018-02-13 \n"," AE \n"," 아이오닉 자가용 하이브리드 N DCT 17MY \n"," 승용 \n"," 준중형 \n"," N \n"," 하이브리드 \n"," AMFQZP101GIOOERA \n"," N \n"," 1980.0 \n"," 남자 \n"," 판매기회_상담완료 \n"," NaN \n"," \n"," \n","
\n","
126548 rows × 14 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":13}]},{"cell_type":"code","source":["df = df[['고객ID','생년','성별구분명','계약일자','차량ID','차종코드','승상구분명','채널구분명']]"],"metadata":{"id":"PwPbzCOTtOEu"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["df.info()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"uP83SOD7cIVB","executionInfo":{"status":"ok","timestamp":1666703966180,"user_tz":-540,"elapsed":385,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"5d092d43-3126-4d7b-e4e9-e737c9a2574b"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Int64Index: 126548 entries, 0 to 126547\n","Data columns (total 8 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 고객ID 126548 non-null object \n"," 1 생년 126548 non-null float64 \n"," 2 성별구분명 126548 non-null object \n"," 3 계약일자 126548 non-null datetime64[ns]\n"," 4 차량ID 126548 non-null object \n"," 5 차종코드 126548 non-null object \n"," 6 승상구분명 126548 non-null object \n"," 7 채널구분명 126548 non-null object \n","dtypes: datetime64[ns](1), float64(1), object(6)\n","memory usage: 8.7+ MB\n"]}]},{"cell_type":"code","source":["## 분석할 연도 설정\n","df = df[df['계약일자'].between('2008-01-01', '2021-12-31')]\n","\n","## 결측값 처리\n","df = df.dropna()"],"metadata":{"id":"72zLb560b3Xz"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["df"],"metadata":{"id":"UEW-eQlHbrjO","colab":{"base_uri":"https://localhost:8080/","height":424},"executionInfo":{"status":"ok","timestamp":1666703971083,"user_tz":-540,"elapsed":6,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"f68d91da-26fc-48b7-dec7-a291fe71e7da"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 고객ID 생년 성별구분명 계약일자 차량ID 차종코드 승상구분명 \\\n","0 APW9ZIWDQQNYY8LK 1992.0 남자 2021-03-02 C98N3HQIS4G67 IG 승용 \n","4 A4W2GG6ZLMZ81DB3 1974.0 여자 2020-05-11 CXMMZDI2JRWCX DN 승용 \n","5 A4W2GG6ZLMZ81DB3 1974.0 여자 2020-05-11 CXMMZDI2JRWCX DN 승용 \n","22 A0G4BEZSV33U6T0B 1986.0 여자 2021-07-26 CA1M9D9IHFMYP OS RV \n","23 AK4137SPJEPNX63F 1970.0 남자 2021-12-22 CGDV24KQXCAX0 NE RV \n","... ... ... ... ... ... ... ... \n","126542 A7G45P5I4GJPNILT 1986.0 남자 2020-07-16 CN05IXLBICBB1 JS 승용 \n","126543 ACWSOYPRRWLHL2I1 1979.0 남자 2011-10-25 CF5XYYWGM4962 MD 승용 \n","126544 ACWSOYPRRWLHL2I1 1979.0 남자 2016-05-04 C91VRA1RAE6EL TL RV \n","126546 APXWMUKE36MD8PX1 1984.0 남자 2010-07-29 COBZ4YAULMIMD JA 소형상용 \n","126547 AMFQZP101GIOOERA 1980.0 남자 2018-02-13 CVJ1K1B9RQCRP AE 승용 \n","\n"," 채널구분명 \n","0 시승시스템 \n","4 시승시스템 \n","5 시승시스템 \n","22 현대닷컴 \n","23 시승시스템 \n","... ... \n","126542 판매기회_상담완료 \n","126543 판매기회_상담완료 \n","126544 판매기회_상담완료 \n","126546 판매기회_상담완료 \n","126547 판매기회_상담완료 \n","\n","[76805 rows x 8 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 고객ID \n"," 생년 \n"," 성별구분명 \n"," 계약일자 \n"," 차량ID \n"," 차종코드 \n"," 승상구분명 \n"," 채널구분명 \n"," \n"," \n"," \n"," \n"," 0 \n"," APW9ZIWDQQNYY8LK \n"," 1992.0 \n"," 남자 \n"," 2021-03-02 \n"," C98N3HQIS4G67 \n"," IG \n"," 승용 \n"," 시승시스템 \n"," \n"," \n"," 4 \n"," A4W2GG6ZLMZ81DB3 \n"," 1974.0 \n"," 여자 \n"," 2020-05-11 \n"," CXMMZDI2JRWCX \n"," DN \n"," 승용 \n"," 시승시스템 \n"," \n"," \n"," 5 \n"," A4W2GG6ZLMZ81DB3 \n"," 1974.0 \n"," 여자 \n"," 2020-05-11 \n"," CXMMZDI2JRWCX \n"," DN \n"," 승용 \n"," 시승시스템 \n"," \n"," \n"," 22 \n"," A0G4BEZSV33U6T0B \n"," 1986.0 \n"," 여자 \n"," 2021-07-26 \n"," CA1M9D9IHFMYP \n"," OS \n"," RV \n"," 현대닷컴 \n"," \n"," \n"," 23 \n"," AK4137SPJEPNX63F \n"," 1970.0 \n"," 남자 \n"," 2021-12-22 \n"," CGDV24KQXCAX0 \n"," NE \n"," RV \n"," 시승시스템 \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 126542 \n"," A7G45P5I4GJPNILT \n"," 1986.0 \n"," 남자 \n"," 2020-07-16 \n"," CN05IXLBICBB1 \n"," JS \n"," 승용 \n"," 판매기회_상담완료 \n"," \n"," \n"," 126543 \n"," ACWSOYPRRWLHL2I1 \n"," 1979.0 \n"," 남자 \n"," 2011-10-25 \n"," CF5XYYWGM4962 \n"," MD \n"," 승용 \n"," 판매기회_상담완료 \n"," \n"," \n"," 126544 \n"," ACWSOYPRRWLHL2I1 \n"," 1979.0 \n"," 남자 \n"," 2016-05-04 \n"," C91VRA1RAE6EL \n"," TL \n"," RV \n"," 판매기회_상담완료 \n"," \n"," \n"," 126546 \n"," APXWMUKE36MD8PX1 \n"," 1984.0 \n"," 남자 \n"," 2010-07-29 \n"," COBZ4YAULMIMD \n"," JA \n"," 소형상용 \n"," 판매기회_상담완료 \n"," \n"," \n"," 126547 \n"," AMFQZP101GIOOERA \n"," 1980.0 \n"," 남자 \n"," 2018-02-13 \n"," CVJ1K1B9RQCRP \n"," AE \n"," 승용 \n"," 판매기회_상담완료 \n"," \n"," \n","
\n","
76805 rows × 8 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":17}]},{"cell_type":"code","source":["df = df.sort_values(by='계약일자')"],"metadata":{"id":"pyHBFxsW0m28"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["from tqdm import tqdm\n","from collections import Counter\n","\n","## 먼저 각 고객별로 구매량이 얼마인가, 고객 고유치 : 51397\n","top_data = Counter(df['고객ID']).most_common() ## 데이터 개수가 많은 순으로 출력\n","monetary_df = pd.DataFrame() ## 구매량 데이터 초기화\n","# monetary_df['고객ID'] = top_data ## 고객아이디 삽입\n","\n","data = [x[1] for x in top_data] ## 데이터 개수\n","cus = [x[0] for x in top_data] ## 고객\n","\n","customer_id = list(cus)\n","monetary_df['고객ID'] = customer_id\n","\n","monetary_data = [] ## 구매량을 담을 리스트\n","for i in tqdm(data, position=0, desc='Calculating amount of individual customer'):\n"," monetary_data.append(i) ## 해당 고객 구매량\n","\n","monetary_df['Monetary'] = monetary_data ## 구매량 데이터 삽입\n","monetary_df['고객ID'] = cus\n","\n","## 각 고객별 최근방문일을 알아보자.\n","temp_recency_df = df[['고객ID','계약일자']].drop_duplicates() ## 고객 아이디와 계약일자만 추출한뒤 중복 제거\n","recency_df = temp_recency_df.groupby('고객ID')['계약일자'].max().reset_index() ## 아이디로 그룹화 한다음 최근방문일을 구해야하므로 날짜에 max를 적용한다.\n","recency_df = recency_df.rename(columns={'계약일자':'Recency'})\n","\n","## 각 고객별 방문횟수를 알아보자.\n","temp_frequency_df = df[['고객ID','계약일자']].drop_duplicates() ## 고객 아이디와 계약일자만 추출한뒤 중복 제거\n","frequency_df = temp_frequency_df.groupby('고객ID')['계약일자'].count().reset_index() ## 아이디로 그룹화 한다음 방문횟수를 구해야 한다. 여기서는 방문횟수를 계약일수로 생각했으므로 계약일수에 count를 적용한다.\n","frequency_df = frequency_df.rename(columns={'계약일자':'Frequency'})\n","\n","## 데이터를 고객아이디를 기준으로 합쳐야한다.\n","rfm_df = pd.merge(recency_df,frequency_df,how='left',on='고객ID')\n","rfm_df = pd.merge(rfm_df,monetary_df,how='left',on='고객ID')"],"metadata":{"id":"DfHv_X4q4GV-","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1666703978928,"user_tz":-540,"elapsed":1268,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"ed4bf79f-7e9d-4f58-9e9b-b77b24388e03"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stderr","text":["Calculating amount of individual customer: 100%|██████████| 32492/32492 [00:00<00:00, 1362567.99it/s]\n"]}]},{"cell_type":"code","source":["monetary_df.nunique()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"itXB2jjgVD-R","executionInfo":{"status":"ok","timestamp":1666703983111,"user_tz":-540,"elapsed":307,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"0fe05e8f-35ef-41d9-9d7a-e3995b2fdd14"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["고객ID 32492\n","Monetary 66\n","dtype: int64"]},"metadata":{},"execution_count":20}]},{"cell_type":"code","source":["rfm_df.nunique()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"nHioVpINu6Sv","executionInfo":{"status":"ok","timestamp":1666703983861,"user_tz":-540,"elapsed":307,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"cbf30930-541d-46cb-96b2-6ec44f515f8e"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["고객ID 32492\n","Recency 3491\n","Frequency 19\n","Monetary 66\n","dtype: int64"]},"metadata":{},"execution_count":21}]},{"cell_type":"code","source":["rfm_df"],"metadata":{"id":"4G6Yt2-C4GOv","colab":{"base_uri":"https://localhost:8080/","height":424},"executionInfo":{"status":"ok","timestamp":1666703986688,"user_tz":-540,"elapsed":354,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"28ab3e1c-e61d-4e8e-c395-b9ffe68bb844"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 고객ID Recency Frequency Monetary\n","0 A0063H17IS0OELIO 2018-04-06 1 1\n","1 A007E35OUXTJ3BRR 2021-06-22 1 1\n","2 A008UGCQHSONWYDJ 2019-09-25 1 1\n","3 A00AXO66OKGQAC8F 2021-09-14 1 1\n","4 A00BD03LKJIH6LTU 2016-11-02 2 4\n","... ... ... ... ...\n","32487 AZZY0IZN75VOACLI 2018-12-03 1 1\n","32488 AZZYI8XJU7OCXO73 2011-06-27 1 1\n","32489 AZZYZ8SXW66M0RBL 2021-09-15 2 2\n","32490 AZZZ70FWYOY16G62 2011-02-18 3 6\n","32491 AZZZJRP386XZ190R 2009-02-23 1 1\n","\n","[32492 rows x 4 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 고객ID \n"," Recency \n"," Frequency \n"," Monetary \n"," \n"," \n"," \n"," \n"," 0 \n"," A0063H17IS0OELIO \n"," 2018-04-06 \n"," 1 \n"," 1 \n"," \n"," \n"," 1 \n"," A007E35OUXTJ3BRR \n"," 2021-06-22 \n"," 1 \n"," 1 \n"," \n"," \n"," 2 \n"," A008UGCQHSONWYDJ \n"," 2019-09-25 \n"," 1 \n"," 1 \n"," \n"," \n"," 3 \n"," A00AXO66OKGQAC8F \n"," 2021-09-14 \n"," 1 \n"," 1 \n"," \n"," \n"," 4 \n"," A00BD03LKJIH6LTU \n"," 2016-11-02 \n"," 2 \n"," 4 \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 32487 \n"," AZZY0IZN75VOACLI \n"," 2018-12-03 \n"," 1 \n"," 1 \n"," \n"," \n"," 32488 \n"," AZZYI8XJU7OCXO73 \n"," 2011-06-27 \n"," 1 \n"," 1 \n"," \n"," \n"," 32489 \n"," AZZYZ8SXW66M0RBL \n"," 2021-09-15 \n"," 2 \n"," 2 \n"," \n"," \n"," 32490 \n"," AZZZ70FWYOY16G62 \n"," 2011-02-18 \n"," 3 \n"," 6 \n"," \n"," \n"," 32491 \n"," AZZZJRP386XZ190R \n"," 2009-02-23 \n"," 1 \n"," 1 \n"," \n"," \n","
\n","
32492 rows × 4 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":22}]},{"cell_type":"code","source":["from sklearn import preprocessing\n","\n","def get_score(level, data):\n","\n"," score = [] \n"," for j in range(len(data)): \n"," for i in range(len(level)): \n"," if data[j] <= level[i]: \n"," score.append(i+1) \n"," break \n"," elif data[j] > max(level): \n"," score.append(len(level)+1) \n"," break \n"," else: \n"," continue\n"," return score\n"," \n","def get_rfm_grade(df, num_class, rfm_tick_point, rfm_col_map, suffix=None):\n","##### 최근방문일/방문횟수/구매금액 점수 부여\n"," for k, v in rfm_tick_point.items():\n"," if isinstance(v,str):\n"," if v == 'quantile':\n"," ## 데이터 변환\n"," scale = preprocessing.StandardScaler() ## 데이터의 범위 조작하기 쉽게 해주는 클래스 \n"," temp_data = np.array(df[rfm_col_map[k]]) ## 데이터를 Numpy 배열로 변환\n"," temp_data = temp_data.reshape((-1,1)) ## scale을 적용하기위해 1차원 배열을 2차원으로 변환\n"," temp_data = scale.fit_transform(temp_data) ## 데이터를 평균은 0, 표준편차는 1을 갖도록 변환 \n"," temp_data = temp_data.squeeze() ## 데이터를 다시 1차원으로 변환\n"," \n"," ## 분위수 벡터\n"," quantiles_level = np.linspace(0,1,num_class+1)[1:-1] ## 분위수를 구할 기준값을 지정 0과 1은 제외\n"," quantiles = [] ## 분위수를 담을 리스트\n"," for ql in quantiles_level:\n"," quantiles.append(np.quantile(temp_data,ql)) ## 분위수를 계산하고 리스트에 삽입\n"," else: ## min_max인 경우\n"," ## 데이터 변환\n"," temp_data = np.array(df[rfm_col_map[k]])\n"," \n"," ## 등분점 계산\n"," quantiles = np.linspace(np.min(temp_data),np.max(temp_data),num_class+1)[1:-1] ## 최소값과 최대값을 점수 개수만큼 등간격으로 분할하는 점\n"," else: ## 직접 구분값을 넣어주는 경우\n"," temp_data = np.array(df[rfm_col_map[k]])\n"," quantiles = v ## 직접 구분값을 넣어줌\n"," score = get_score(quantiles, temp_data) ## 구분값을 기준으로 점수를 부여하고 리스트로 저장한다.\n"," new_col_name = rfm_col_map[k]+'_'+k ## 점수값을 담는 변수의 이름\n"," if suffix:\n"," new_col_name = rfm_col_map[k]+'_'+suffix\n"," df[new_col_name] = score ## 기존데이터 옆에 점수 데이터를 추가한다.\n"," return df"],"metadata":{"id":"-T3bvGOL4GNR"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["##분위수를 이용해 점수 부여\n","\n","rfm_tick_point={'R':'quantile','F':'quantile','M':'quantile'}\n","rfm_col_map={'R':'Recency','F':'Frequency','M':'Monetary'}\n","\n","result = get_rfm_grade(df=rfm_df, num_class=5, rfm_tick_point=rfm_tick_point, rfm_col_map=rfm_col_map)\n","result.to_csv('result.csv',index=False)"],"metadata":{"id":"Qp6ffDSVibw1"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["result[['고객ID','Recency_R','Frequency_F','Monetary_M']]"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":424},"id":"TohE9Hhfibu3","executionInfo":{"status":"ok","timestamp":1666703996771,"user_tz":-540,"elapsed":6,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"a980e7ed-8ace-4695-c680-8fe240c48f95"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 고객ID Recency_R Frequency_F Monetary_M\n","0 A0063H17IS0OELIO 3 1 1\n","1 A007E35OUXTJ3BRR 5 1 1\n","2 A008UGCQHSONWYDJ 3 1 1\n","3 A00AXO66OKGQAC8F 5 1 1\n","4 A00BD03LKJIH6LTU 2 4 5\n","... ... ... ... ...\n","32487 AZZY0IZN75VOACLI 3 1 1\n","32488 AZZYI8XJU7OCXO73 1 1 1\n","32489 AZZYZ8SXW66M0RBL 5 4 3\n","32490 AZZZ70FWYOY16G62 1 5 5\n","32491 AZZZJRP386XZ190R 1 1 1\n","\n","[32492 rows x 4 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 고객ID \n"," Recency_R \n"," Frequency_F \n"," Monetary_M \n"," \n"," \n"," \n"," \n"," 0 \n"," A0063H17IS0OELIO \n"," 3 \n"," 1 \n"," 1 \n"," \n"," \n"," 1 \n"," A007E35OUXTJ3BRR \n"," 5 \n"," 1 \n"," 1 \n"," \n"," \n"," 2 \n"," A008UGCQHSONWYDJ \n"," 3 \n"," 1 \n"," 1 \n"," \n"," \n"," 3 \n"," A00AXO66OKGQAC8F \n"," 5 \n"," 1 \n"," 1 \n"," \n"," \n"," 4 \n"," A00BD03LKJIH6LTU \n"," 2 \n"," 4 \n"," 5 \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 32487 \n"," AZZY0IZN75VOACLI \n"," 3 \n"," 1 \n"," 1 \n"," \n"," \n"," 32488 \n"," AZZYI8XJU7OCXO73 \n"," 1 \n"," 1 \n"," 1 \n"," \n"," \n"," 32489 \n"," AZZYZ8SXW66M0RBL \n"," 5 \n"," 4 \n"," 3 \n"," \n"," \n"," 32490 \n"," AZZZ70FWYOY16G62 \n"," 1 \n"," 5 \n"," 5 \n"," \n"," \n"," 32491 \n"," AZZZJRP386XZ190R \n"," 1 \n"," 1 \n"," 1 \n"," \n"," \n","
\n","
32492 rows × 4 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":25}]},{"cell_type":"markdown","source":["### ***rfm_score data 설명***\n","\n","1. Recency = 최근 구매일\n","2. Frequency = 방문횟수\n","3. Monetary = 구매횟수\n","4. Recency_R = 최근 구매일 점수, 1~5점으로 점수가 높을수록 좋다.\n","5. Frequency_F = 방문횟수 점수, 1~5점으로 점수가 높을수록 좋다.\n","6. Monetary_M = 구매횟수 점수, 1~5점으로 점수가 높을수록 좋다."],"metadata":{"id":"wP83AXpAV12A"}},{"cell_type":"code","source":["## data load\n","rfm_score = pd.read_csv('result.csv')\n","rfm_score.head(10)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":363},"id":"Om2lXGw_j1i6","executionInfo":{"status":"ok","timestamp":1666704001275,"user_tz":-540,"elapsed":298,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"a17fd7da-2f0d-40ab-9d3b-aca3abc85b85"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 고객ID Recency Frequency Monetary Recency_R Frequency_F \\\n","0 A0063H17IS0OELIO 2018-04-06 1 1 3 1 \n","1 A007E35OUXTJ3BRR 2021-06-22 1 1 5 1 \n","2 A008UGCQHSONWYDJ 2019-09-25 1 1 3 1 \n","3 A00AXO66OKGQAC8F 2021-09-14 1 1 5 1 \n","4 A00BD03LKJIH6LTU 2016-11-02 2 4 2 4 \n","5 A00BKTGNMZXXU9NB 2015-09-25 1 1 2 1 \n","6 A00E949YXDIP24UM 2021-12-30 1 1 5 1 \n","7 A00EIFH5MF1D3N68 2010-04-19 1 3 1 1 \n","8 A00EKMHO59OQNRCX 2016-12-16 1 2 2 1 \n","9 A00FF7U0QU7LK2E5 2012-02-20 2 2 1 4 \n","\n"," Monetary_M \n","0 1 \n","1 1 \n","2 1 \n","3 1 \n","4 5 \n","5 1 \n","6 1 \n","7 4 \n","8 3 \n","9 3 "],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 고객ID \n"," Recency \n"," Frequency \n"," Monetary \n"," Recency_R \n"," Frequency_F \n"," Monetary_M \n"," \n"," \n"," \n"," \n"," 0 \n"," A0063H17IS0OELIO \n"," 2018-04-06 \n"," 1 \n"," 1 \n"," 3 \n"," 1 \n"," 1 \n"," \n"," \n"," 1 \n"," A007E35OUXTJ3BRR \n"," 2021-06-22 \n"," 1 \n"," 1 \n"," 5 \n"," 1 \n"," 1 \n"," \n"," \n"," 2 \n"," A008UGCQHSONWYDJ \n"," 2019-09-25 \n"," 1 \n"," 1 \n"," 3 \n"," 1 \n"," 1 \n"," \n"," \n"," 3 \n"," A00AXO66OKGQAC8F \n"," 2021-09-14 \n"," 1 \n"," 1 \n"," 5 \n"," 1 \n"," 1 \n"," \n"," \n"," 4 \n"," A00BD03LKJIH6LTU \n"," 2016-11-02 \n"," 2 \n"," 4 \n"," 2 \n"," 4 \n"," 5 \n"," \n"," \n"," 5 \n"," A00BKTGNMZXXU9NB \n"," 2015-09-25 \n"," 1 \n"," 1 \n"," 2 \n"," 1 \n"," 1 \n"," \n"," \n"," 6 \n"," A00E949YXDIP24UM \n"," 2021-12-30 \n"," 1 \n"," 1 \n"," 5 \n"," 1 \n"," 1 \n"," \n"," \n"," 7 \n"," A00EIFH5MF1D3N68 \n"," 2010-04-19 \n"," 1 \n"," 3 \n"," 1 \n"," 1 \n"," 4 \n"," \n"," \n"," 8 \n"," A00EKMHO59OQNRCX \n"," 2016-12-16 \n"," 1 \n"," 2 \n"," 2 \n"," 1 \n"," 3 \n"," \n"," \n"," 9 \n"," A00FF7U0QU7LK2E5 \n"," 2012-02-20 \n"," 2 \n"," 2 \n"," 1 \n"," 4 \n"," 3 \n"," \n"," \n","
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":26}]},{"cell_type":"code","source":["rfm_score = rfm_score[['고객ID', 'Monetary', 'Recency_R','Frequency_F','Monetary_M']]"],"metadata":{"id":"p3Z9Qe_Xj90r"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["def get_score(level, data, reverse = False):\n"," score = [] \n"," for j in range(len(data)): \n"," for i in range(len(level)): \n"," if data[j] <= level[i]: \n"," score.append(i+1) \n"," break \n"," elif data[j] > max(level): \n"," score.append(len(level)+1) \n"," break \n"," else: \n"," continue\n"," if reverse:\n"," return [len(level)+2-x for x in score]\n"," else:\n"," return score \n"," \n","grid_number = 100 ## 눈금 개수, 너무 크게 잡으면 메모리 문제가 발생할 수 있음.\n","weights = []\n","for j in range(grid_number+1):\n"," weights += [(i/grid_number,j/grid_number,(grid_number-i-j)/grid_number)\n"," for i in range(grid_number+1-j)]\n","num_class = 5 ## 클래스 개수\n","class_level = np.linspace(1,5,num_class+1)[1:-1] ## 클래스를 나누는 지점을 정한다.\n","total_amount_of_sales = rfm_score['Monetary'].sum() ## 구매금액 총합 = 총 매출"],"metadata":{"id":"L4gDWKYzj9yO"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# class의 구간치, 1.8 이하면 5등급, 4.2이상이면 1등급 고객\n","\n","num_class = 5\n","class_level = np.linspace(1,5,num_class+1)[1:-1] ## 클래스를 나누는 지점을 정한다.\n","print(class_level)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"YxqBkpxZEXMh","executionInfo":{"status":"ok","timestamp":1666704018538,"user_tz":-540,"elapsed":4,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"d7d6fc81-91d9-42a9-9eca-5140d2011760"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["[1.8 2.6 3.4 4.2]\n"]}]},{"cell_type":"code","source":["## 최적의 표준편차 값을 구하는 Logic\n","\n","max_std = 0 ## 표준편차 초기값\n","\n","for w in tqdm(weights,position=0,desc = '[Finding Optimal weights]'):\n"," ## 주어진 가중치에 따른 고객별 점수 계산\n"," score = w[0]*rfm_score['Recency_R'] + \\\n"," w[1]*rfm_score['Frequency_F'] + \\\n"," w[2]*rfm_score['Monetary_M'] \n"," rfm_score['Class'] = get_score(class_level,score,True) ## 점수를 이용하여 고객별 등급 부여\n"," ## 등급별로 구매금액을 집계한다.\n"," grouped_rfm_score = rfm_score.groupby('Class')['Monetary'].sum().reset_index()\n","\n"," ## 등급이 높은 고객들의 매출이 낮은 등급의 고객들보다 커야한다.\n"," grouped_rfm_score = grouped_rfm_score.sort_values('Class')\n"," temp_monetary = list(grouped_rfm_score['Monetary'])\n"," if temp_monetary != sorted(temp_monetary,reverse=True):\n"," continue\n"," \n"," ## 클래스별 구매금액을 총구매금액으로 나누어 클래스별 매출 기여도 계산\n"," grouped_rfm_score['Monetary'] = grouped_rfm_score['Monetary'].map(lambda x : x/total_amount_of_sales)\n"," std_sales = grouped_rfm_score['Monetary'].std() ## 매출 기여도의 표준편차 계산\n","\n"," ## 표준편차 최대값 업데이트 및 가중치 업데이트\n"," if max_std <= std_sales:\n"," max_std = std_sales \n"," optimal_weights = w"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"BB0rJivmj9wD","executionInfo":{"status":"ok","timestamp":1666706060561,"user_tz":-540,"elapsed":2015434,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"25c701f9-4b4b-4f52-cc6e-5836fdfbba17"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stderr","text":["[Finding Optimal weights]: 100%|██████████| 5151/5151 [33:34<00:00, 2.56it/s]\n"]}]},{"cell_type":"code","source":["print('Recency_R, Frequency_F, Monetary_M의 최적의 가중치 :',optimal_weights)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"12MKxXGPkb34","executionInfo":{"status":"ok","timestamp":1666706070608,"user_tz":-540,"elapsed":459,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"2ce05aeb-c3a8-4ca8-b428-2b6e00b82003"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Recency_R, Frequency_F, Monetary_M의 최적의 가중치 : (0.36, 0.04, 0.6)\n"]}]},{"cell_type":"code","source":["score = optimal_weights[0]*rfm_score['Recency_R'] + \\\n"," optimal_weights[1]*rfm_score['Frequency_F'] + \\\n"," optimal_weights[2]*rfm_score['Monetary_M'] ## 고객별 점수 계산\n","\n","rfm_score['Class'] = get_score(class_level,score,True) ## 고객별 등급 부여"],"metadata":{"id":"OBb8KY5ckcsO"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["rfm_score"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":424},"id":"Gp6M1M5kSyEX","executionInfo":{"status":"ok","timestamp":1666706076188,"user_tz":-540,"elapsed":7,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"e38b5f82-2893-467d-e393-bb1f28107487"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" 고객ID Monetary Recency_R Frequency_F Monetary_M Class\n","0 A0063H17IS0OELIO 1 3 1 1 5\n","1 A007E35OUXTJ3BRR 1 5 1 1 4\n","2 A008UGCQHSONWYDJ 1 3 1 1 5\n","3 A00AXO66OKGQAC8F 1 5 1 1 4\n","4 A00BD03LKJIH6LTU 4 2 4 5 2\n","... ... ... ... ... ... ...\n","32487 AZZY0IZN75VOACLI 1 3 1 1 5\n","32488 AZZYI8XJU7OCXO73 1 1 1 1 5\n","32489 AZZYZ8SXW66M0RBL 2 5 4 3 2\n","32490 AZZZ70FWYOY16G62 6 1 5 5 2\n","32491 AZZZJRP386XZ190R 1 1 1 1 5\n","\n","[32492 rows x 6 columns]"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," 고객ID \n"," Monetary \n"," Recency_R \n"," Frequency_F \n"," Monetary_M \n"," Class \n"," \n"," \n"," \n"," \n"," 0 \n"," A0063H17IS0OELIO \n"," 1 \n"," 3 \n"," 1 \n"," 1 \n"," 5 \n"," \n"," \n"," 1 \n"," A007E35OUXTJ3BRR \n"," 1 \n"," 5 \n"," 1 \n"," 1 \n"," 4 \n"," \n"," \n"," 2 \n"," A008UGCQHSONWYDJ \n"," 1 \n"," 3 \n"," 1 \n"," 1 \n"," 5 \n"," \n"," \n"," 3 \n"," A00AXO66OKGQAC8F \n"," 1 \n"," 5 \n"," 1 \n"," 1 \n"," 4 \n"," \n"," \n"," 4 \n"," A00BD03LKJIH6LTU \n"," 4 \n"," 2 \n"," 4 \n"," 5 \n"," 2 \n"," \n"," \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," ... \n"," \n"," \n"," 32487 \n"," AZZY0IZN75VOACLI \n"," 1 \n"," 3 \n"," 1 \n"," 1 \n"," 5 \n"," \n"," \n"," 32488 \n"," AZZYI8XJU7OCXO73 \n"," 1 \n"," 1 \n"," 1 \n"," 1 \n"," 5 \n"," \n"," \n"," 32489 \n"," AZZYZ8SXW66M0RBL \n"," 2 \n"," 5 \n"," 4 \n"," 3 \n"," 2 \n"," \n"," \n"," 32490 \n"," AZZZ70FWYOY16G62 \n"," 6 \n"," 1 \n"," 5 \n"," 5 \n"," 2 \n"," \n"," \n"," 32491 \n"," AZZZJRP386XZ190R \n"," 1 \n"," 1 \n"," 1 \n"," 1 \n"," 5 \n"," \n"," \n","
\n","
32492 rows × 6 columns
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":33}]},{"cell_type":"code","source":["## 클래스별 고객 수 계산\n","temp_rfm_score1 = rfm_score.groupby('Class')['고객ID'].count().reset_index().rename(columns={'CustomerID':'Count'})\n"," \n","## 클래스별 구매금액(매출)계산\n","temp_rfm_score2 = rfm_score.groupby('Class')['Monetary'].sum().reset_index()\n","\n","## 클래스별 매출 기여도 계산\n","temp_rfm_score2['Contribution'] = temp_rfm_score2['Monetary'].map(lambda x : x/total_amount_of_sales)\n"," \n","## 데이터 결합\n","result_df = pd.merge(temp_rfm_score1,temp_rfm_score2,how='left',on=('Class'))"],"metadata":{"id":"2CKt4HrQkcpU"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["result_df"],"metadata":{"id":"etMmJUWNkcm_","colab":{"base_uri":"https://localhost:8080/","height":206},"executionInfo":{"status":"ok","timestamp":1666681356665,"user_tz":-540,"elapsed":5,"user":{"displayName":"김민섭","userId":"03753204933516620337"}},"outputId":"a578a659-baac-40cc-e404-dcfb348eac87"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Class 고객ID Monetary\n","0 1 3545 0.347959\n","1 2 3894 0.186004\n","2 3 5488 0.173192\n","3 4 9184 0.157685\n","4 5 10381 0.135160"],"text/html":["\n"," \n","
\n","
\n","\n","
\n"," \n"," \n"," \n"," Class \n"," 고객ID \n"," Monetary \n"," \n"," \n"," \n"," \n"," 0 \n"," 1 \n"," 3545 \n"," 0.347959 \n"," \n"," \n"," 1 \n"," 2 \n"," 3894 \n"," 0.186004 \n"," \n"," \n"," 2 \n"," 3 \n"," 5488 \n"," 0.173192 \n"," \n"," \n"," 3 \n"," 4 \n"," 9184 \n"," 0.157685 \n"," \n"," \n"," 4 \n"," 5 \n"," 10381 \n"," 0.135160 \n"," \n"," \n","
\n","
\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n"," \n","
\n","
\n"," "]},"metadata":{},"execution_count":37}]},{"cell_type":"code","source":[],"metadata":{"id":"VGvXOYI6j9ty"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"bRcAI6ebkQgP"},"execution_count":null,"outputs":[]}]}
\ No newline at end of file