การแนะนำ

บทความนี้อธิบายวิธีใช้การเรียนรู้ของเครื่องเพื่อรับโอกาสในการขายจากข้อมูลประชากร เป็นส่วนหนึ่งของโปรแกรม Udacity Data Scientist Nanodegree และอธิบายขั้นตอนหลักของการแก้ปัญหาทางธุรกิจขั้นพื้นฐาน ได้แก่ การทำความเข้าใจข้อมูล การเตรียมข้อมูล การสร้างแบบจำลอง และการประเมินผล Arvato Financial Solutions ซึ่งเป็นบริษัทในเครือของ Bertelsmann ได้ให้ข้อมูลและคำแนะนำสำหรับโครงการนี้

โครงการทั้งหมดแบ่งออกเป็นสองส่วน:

ในส่วนแรก ควรเปรียบเทียบข้อมูลประชากรของลูกค้าปัจจุบันของบริษัทกับจำนวนประชากรทั้งหมดในเยอรมนี ดังนั้น ควรใช้วิธีการฝึกอบรมที่ไม่มีการควบคุมเพื่อระบุกลุ่มที่อธิบายฐานลูกค้าหลักของบริษัทที่สั่งซื้อทางไปรษณีย์ได้ดีที่สุด

ส่วนที่สองนำเสนอชุดข้อมูลอื่นพร้อมข้อมูลประชากรสำหรับแคมเปญการตลาดของบริษัท เพื่อคาดการณ์ว่าคนใดมีแนวโน้มที่จะกลายเป็นลูกค้าของบริษัทมากที่สุด จำเป็นต้องใช้วิธีการฝึกอบรมแบบควบคุม
ไลบรารีหลักที่ใช้ในสองส่วนของโครงการคือ sklearn (Python)

ส่วนที่ 1: การแบ่งส่วนลูกค้า

การวิเคราะห์

เพื่อจัดการกับงานที่ได้รับมอบหมายก่อนอื่น จำเป็นต้องมีการวิเคราะห์ข้อมูลที่ให้มาอย่างละเอียดถี่ถ้วน ชุดข้อมูลหลักสองชุดจัดทำโดย Arvato Financial Solutions เป็นไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาค:

  • AZDIAS (พฤษภาคม 2018): ข้อมูลประชากรสำหรับประชากรทั่วไปของเยอรมนี 891 211 ท่าน 366 ท่าน
  • ลูกค้า (พฤษภาคม 2018): ข้อมูลประชากรสำหรับลูกค้าของบริษัทสั่งซื้อทางไปรษณีย์ 191 652 ท่าน 369 ท่าน

ไฟล์ลูกค้ามีคุณลักษณะพิเศษสามประการ (CUSTOMER_GROUP, ONLINE_PURCHASE และ PRODUCT_GROUP) ซึ่งให้ข้อมูลกว้างๆ เกี่ยวกับลูกค้าที่ปรากฎในไฟล์

นอกจากนี้ยังมีไฟล์คำอธิบายสองไฟล์เพื่อให้ข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับคุณสมบัติของชุดข้อมูลทั้งสอง:

  • ระดับข้อมูล DIAS — คุณลักษณะ (2017): ให้ระดับข้อมูล คำอธิบาย และหมายเหตุเพิ่มเติมสำหรับแต่ละคุณลักษณะ
  • แอตทริบิวต์ DIAS - ค่า (2017): ให้คำอธิบายและแผนผังค่า/ความหมายสำหรับแต่ละคุณลักษณะ

เมื่อใช้ไฟล์คำอธิบาย ไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาคอีกไฟล์จะถูกสร้างขึ้นด้วยตนเอง ซึ่งเรียกอีกอย่างว่าข้อมูลฟังก์ชัน โดยจะเรียงลำดับคุณลักษณะตามลำดับตัวอักษรและแมปการเรียงลำดับ (การจำแนกประเภท สารผสม ตัวเลข ทั่วไป) และการแมปที่เกี่ยวข้องกับการขาดข้อมูลที่เกี่ยวข้องกับแต่ละองค์ประกอบ

ปัญหาที่ใหญ่ที่สุดในกระบวนการสร้างไฟล์คือความแตกต่างระหว่างฟังก์ชันชุดข้อมูลและไฟล์อธิบาย ตัวอย่างเช่น ชื่อฟังก์ชันจะแตกต่างออกไปเล็กน้อย แต่ที่สำคัญกว่านั้นคือ ไม่ใช่ทุกฟังก์ชันที่จะพบได้ในไฟล์คำอธิบาย บนพื้นฐานของการประเมินเพิ่มเติม คุณสามารถเพิ่มคำอธิบายที่ขาดหายไปใน "ข้อมูลฟังก์ชัน" ได้ แต่ไม่สามารถระบุฟังก์ชันได้ทั้งหมด 32 ฟังก์ชัน

การประมวลผลข้อมูลล่วงหน้า

หากต้องการใช้เทคนิคการเรียนรู้ของเครื่องกับข้อมูลที่กำหนด จะต้องดำเนินการขั้นตอนก่อนการประมวลผลสองสามขั้นตอน ชุดข้อมูล AZDIAS ได้รับการประมวลผลล่วงหน้าตามคำอธิบายด้านล่าง (ขั้นตอนที่ 1 ถึง 6) สำหรับการนำขั้นตอนเดียวกันนี้ไปใช้กับชุดข้อมูลอื่นๆ (เช่น ลูกค้า) ขั้นตอนที่ 1 ถึง 5 จะถูกรวมเข้ากับฟังก์ชันการทำความสะอาด

ขั้นตอนที่ 1: วางคุณลักษณะที่ไม่ได้อธิบายไว้

ตามที่ระบุไว้ข้างต้น ข้อมูลขาดหายไปเพื่อกำหนดประเภทและ/หรือค่าที่สอดคล้องกับข้อมูลที่ขาดหายไปให้กับคุณสมบัติ 32 รายการอย่างชัดเจน คุณลักษณะนี้ต้องถูกละทิ้งจากชุดข้อมูลดั้งเดิม

ขั้นตอนที่ 2: แปลงค่าที่หายไป

FEATURE INFO ที่สร้างขึ้นด้วยตนเองประกอบด้วยค่าทั้งหมดที่สอดคล้องกับข้อมูลที่ขาดหายไป นอกเหนือจากค่า NaN ที่มีอยู่แล้วในชุดข้อมูล ตัวยึดตำแหน่งเหล่านี้จะต้องแปลงเป็นค่า NaN ขั้นตอนนี้เป็นเงื่อนไขล่วงหน้าสำหรับขั้นตอนที่ 3 เนื่องจากไม่เช่นนั้น จะไม่มีภาพที่ชัดเจนว่ามีกี่ค่าที่หายไปต่อจุดสนใจ

ขั้นตอนที่ 3: ยกเลิกคุณลักษณะที่มีค่าที่ไม่ทราบเปอร์เซ็นต์สูง

มีการตัดสินใจที่จะละทิ้งคุณลักษณะทั้งหมดที่มีค่าที่หายไปเป็นเปอร์เซ็นต์สูง แน่นอนว่านี่หมายถึงการสูญเสียข้อมูล แต่ดูเหมือนจะเป็นแนวทางที่ดีกว่าในการทดแทนค่านิยม แต่เปอร์เซ็นต์ที่สูงในสถานการณ์นั้นคืออะไร? รูปต่อไปนี้แสดงจำนวนของคุณลักษณะเหนือเปอร์เซ็นต์ของค่าที่หายไป และช่วยในการกำหนดเกณฑ์ (=0.2) สำหรับการยกเลิกคุณลักษณะ คุณลักษณะทั้งหมด 73 รายการได้รับผลกระทบ

ฮิสโตแกรม: จำนวนคุณลักษณะ / เปอร์เซ็นต์ของค่าที่หายไป

ขั้นตอนที่ 4: วางแถวที่มีค่าที่ไม่รู้จักเป็นเปอร์เซ็นต์สูง

ใช้แนวทางเดียวกันกับในขั้นตอนที่ 3 กับแถวที่มีค่าที่หายไปเป็นเปอร์เซ็นต์สูง รูปต่อไปนี้แสดงจำนวนแถวที่มากกว่าเปอร์เซ็นต์ของค่าที่หายไป และช่วยอีกครั้งในการกำหนดขีดจำกัด (=0.3) สำหรับการทิ้งแถว

ฮิสโตแกรม: จำนวนแถว / เปอร์เซ็นต์ของค่าที่หายไป

นอกจากนี้ในขั้นตอนที่ 3 แถวไม่ได้ถูกทิ้งเพียงแต่แยกและบันทึกในชุดข้อมูลแยกต่างหากสำหรับการประมวลผลในภายหลัง

ขั้นตอนที่ 5: เข้ารหัสคุณลักษณะต่างๆ อีกครั้ง

ชุดข้อมูลที่เหลือประกอบด้วยคุณลักษณะสี่ประเภท ได้แก่ หมวดหมู่ แบบผสม ตัวเลข และลำดับ คุณลักษณะส่วนใหญ่เป็นตัวเลขหรือลำดับและสามารถปล่อยไว้ได้โดยไม่ต้องเข้ารหัสซ้ำ

การประเมินคุณสมบัติตามหมวดหมู่ 26 รายการแสดงให้เห็นว่ามี 4 รายการที่ถูกทิ้งในระหว่างขั้นตอนการประมวลผลล่วงหน้าก่อนหน้านี้แล้ว มีอีกสามรายการ (CAMEO_DEU_2015, LP_FAMILIE_FEIN, LP_STATUS_FEIN) ที่อาจหลุดออกจากชุดข้อมูลดั้งเดิมได้เนื่องจากมีความซ้ำซ้อน (มีฟีเจอร์แบบละเอียดและแบบคร่าวๆ) มีเพียงฟีเจอร์เดียวเท่านั้น (OST_WEST_KZ) ที่ต้องเข้ารหัสแบบ Hot Encode ส่วนอื่นๆ ทั้งหมดมีค่าตัวเลขและไม่มีการเปลี่ยนแปลงด้วยเหตุผลที่ทำให้เข้าใจง่าย

นอกจากนี้ยังมีการประเมินคุณสมบัติแบบผสมทั้งสี่ประการด้วย คุณลักษณะ PRAEGENDE_JUGENDJAHRE ถูกแบ่งออกเป็นคุณลักษณะใหม่ DECADE และ MOVEMENT รวมถึงคุณลักษณะ CAMEO_INTL_2015 ถูกแบ่งออกเป็น WEALTH และ LIFE_STAGE ข้อมูลที่มีอยู่ในคุณลักษณะแบบผสมที่เหลืออีกสองรายการ (LP_LEBENSPHASE_FEIN, LP_LEBENSPHASE_GROB) ซ้ำซ้อนกับคุณลักษณะอื่นๆ และไม่ได้มีโครงสร้างที่ชัดเจน ดังนั้นจึงตัดสินใจยกเลิกคุณลักษณะทั้งสอง

ขั้นตอนที่ 6: การนำเข้าและการปรับขนาด

ค่าที่หายไปสุดท้ายแต่ไม่ท้ายสุดจะถูกใส่ด้วยค่ามัธยฐานของจุดสนใจที่เกี่ยวข้อง เนื่องจากคุณลักษณะที่เป็นหมวดหมู่และลำดับส่วนใหญ่ จึงเหนือกว่าการใส่ค่าเฉลี่ย หลังจากนั้นคุณสมบัติต่างๆ ก็ได้มาตรฐาน

การนำไปปฏิบัติ

สำหรับการจัดกลุ่ม PCA ไม่จำเป็นต้องเป็นเงื่อนไขเบื้องต้น แต่จะช่วยลดสัญญาณรบกวน ดังนั้นวิธีการจัดกลุ่มจึงสามารถแยกแยะกลุ่มต่างๆ ได้ดีกว่า (ดูข้อมูลอ้างอิง [3]) นั่นคือเหตุผลว่าทำไมขั้นตอนแรกของการแบ่งกลุ่มลูกค้าคือ PCA ที่มีส่วนประกอบที่มีอยู่ทั้งหมด การใช้แผนหินกรวดช่วยในการระบุจำนวนส่วนประกอบ PCA ที่สามารถลดลงได้ (คุณลักษณะประมาณ 150 รายการสำหรับความแปรปรวนที่อธิบายไว้ที่ 0.9)

รูปต่อไปนี้แสดงแผนภาพหินกรวดสำหรับ PCA พร้อมส่วนประกอบทั้งหมด

PCA: อธิบายความแปรปรวน / จำนวนคุณสมบัติ

จากนั้นใช้ผลลัพธ์ของ PCA ที่มีส่วนประกอบน้อยลงเป็นอินพุตสำหรับการทำคลัสเตอร์ด้วย KMeans เพื่อค้นหาปริมาณที่เหมาะสมของกลุ่ม KMeans ถูกนำมาใช้ในวงที่มีจำนวนกลุ่มตั้งแต่ 1 ถึง 20 หลังจากนั้นจึงใช้วิธีการข้อศอกในการประเมิน

การวางแผนสัดส่วนของจำนวนคลัสเตอร์สำหรับทั้งสองกลุ่ม — ประชากรทั่วไปและลูกค้า — เป็นวิธีง่ายๆ ในการค้นหาว่ากลุ่มใดมีการนำเสนอมากเกินไป/น้อยเกินไป สามารถระบุกลุ่มลูกค้าที่มีการนำเสนอมากเกินไปเป็นกลุ่มเป้าหมายได้อย่างชัดเจน ในกรณีเฉพาะนั้น บุคคลที่มีค่าที่ขาดหายไปจำนวนมาก (ซึ่งถูกแยกระหว่างการประมวลผลล่วงหน้า) ก็สามารถจัดการเป็นคลัสเตอร์ของตัวเองได้

สำหรับกระบวนการเลือกคุณลักษณะ มีการเลือกแนวทางที่มีรูปแบบการเรียนรู้แบบมีผู้สอน (ดูข้อมูลอ้างอิง [4]) การทำนายของกระบวนการจัดกลุ่ม KMeans ถูกนำมาใช้เพื่อให้เหมาะสมกับตัวแยกประเภท LogisticRegression หลังจากนั้นจึงนำค่าสัมประสิทธิ์ไปค้นหาคุณลักษณะที่สำคัญที่สุดสำหรับการจำแนกประเภท ในขั้นตอนสุดท้ายค่าเฉลี่ยและค่ามัธยฐานสำหรับแต่ละคุณลักษณะถูกคำนวณต่อกลุ่มความสนใจ

ภาวะแทรกซ้อน

ในระหว่างการดำเนินการมีปัญหาหลักสองประการเกิดขึ้น ภายในการประมวลผลข้อมูลล่วงหน้ามีวิธีอื่นในการแทนที่ค่าที่หายไปด้วย NaN ก่อนที่จะคิดวิธีแก้ปัญหาขั้นสุดท้าย วิธีแรกคือการวนซ้ำแต่ละคอลัมน์และแถวด้วยตนเอง ข้อเสียคือความซับซ้อนของซอร์สโค้ดและประสิทธิภาพไม่ดี แนวทางที่สองเป็นแบบซับเดียว ซึ่งขจัดความซับซ้อนของซอร์สโค้ดแต่มีประสิทธิภาพลดลงด้วยซ้ำ ในที่สุดฟังก์ชันมาสก์ของ DataFrame ของแพนด้าก็ช่วยแก้ปัญหาทั้งสองได้

จำเป็นต้องตัดสินใจว่าจะดำเนินการเลือกคุณลักษณะสำหรับคลัสเตอร์เป้าหมายอย่างไร ต้องใช้ความพยายามอย่างมากในการค้นคว้าข้อมูลบนเว็บว่าสามารถใช้วิธีใดได้บ้าง การตัดสินใจดังกล่าวสนับสนุนเทคนิคการเรียนรู้แบบมีผู้สอนเนื่องจากความเรียบง่ายของการนำไปปฏิบัติ

การปรับแต่ง

ต้องมีการปรับปรุงบางสิ่งระหว่างการใช้งาน:

  • ภาวะแทรกซ้อนเกี่ยวกับการแทนที่ค่า NaN ที่อธิบายไว้ในส่วนข้างต้นจะต้องได้รับการแก้ไขโดยการวนซ้ำซอร์สโค้ด
  • เดิมทีบุคคลที่มีค่าที่หายไปเป็นเปอร์เซ็นต์สูงไม่ได้ถูกแยกออกมา แต่ค่าทั้งหมดจะถูกใส่ด้วยค่ามัธยฐานของฟีเจอร์แทน ในกรณีเฉพาะนั้น มีการตัดสินใจที่จะจัดการบุคคลเหล่านี้เป็นคลัสเตอร์แยกต่างหากในขั้นตอนหลังของการดำเนินการ

ผลลัพธ์

การวนซ้ำ KMeans ด้วยจำนวนคลัสเตอร์ที่แตกต่างกันส่งผลให้มีความเป็นไปได้ที่จะใช้วิธีการข้อศอก มีการตัดสินใจสนับสนุนกลุ่มเก้ากลุ่ม รูปต่อไปนี้แสดงระยะทางเฉลี่ยถึงเซนทรอยด์ส่วนจำนวนกระจุก

วิธีงอศอก: ระยะทางเฉลี่ยถึงเซนทรอยด์ / จำนวนกระจุก

เมื่อเปรียบเทียบสัดส่วนจำนวนคลัสเตอร์ของประชากรทั่วไปกับลูกค้าแล้ว ให้ผลลัพธ์ที่ชัดเจน รูปต่อไปนี้แสดงสัดส่วนเหล่านี้

คลัสเตอร์นับสัดส่วนสำหรับประชากรทั่วไปและลูกค้า

กลุ่มลูกค้าสองกลุ่มมีการแสดงออกมากเกินไปอย่างชัดเจน (กลุ่ม #4: 29.4% เทียบกับ 12.7% / คลัสเตอร์ #0: 9.2% เทียบกับ 6.3%) และด้วยเหตุนี้ บุคคลจึงถูกกำหนดไว้ล่วงหน้าให้เป็นฐานลูกค้าตามลำดับ กลุ่มเป้าหมายสำหรับบริษัทที่สั่งซื้อทางไปรษณีย์

ตารางต่อไปนี้แสดงค่าเฉลี่ยและค่ามัธยฐานสำหรับคุณลักษณะที่สำคัญที่สุดห้าประการของคลัสเตอร์ #4

การเลือกคุณสมบัติ: คลัสเตอร์ #4

สิ่งที่น่าสนใจสำหรับการวิเคราะห์ของเราคือความแตกต่างโดยเฉพาะคุณลักษณะ ALTERSKATEGORIE_GROB และ W กลุ่มเป้าหมายของเราเปรียบเทียบกับประชากรทั่วไปที่มีอายุมากกว่าสองสามปี ส่วนแบ่งของลูกค้าที่อาศัยอยู่ในอดีตเยอรมนีตะวันตกสอดคล้องกับส่วนแบ่งของประชากรปัจจุบัน (ประมาณ 80%) เนื่องจากมีมูลค่าสูงสำหรับประชากรทั่วไป (0.92) เราจึงอาจกล่าวได้ว่าหากบุคคลหนึ่งอาศัยอยู่ในอดีตเยอรมนีตะวันตก จึงไม่น่าจะเป็นไปได้ที่บุคคลนี้จะกลายเป็นลูกค้า การสอบสวนเพิ่มเติมแสดงให้เห็นว่าเราต้องระมัดระวังกับข้อความนั้น (อ้างอิงถึงกลุ่ม #7)

ตารางต่อไปนี้แสดงค่าเฉลี่ยและมัธยฐานสำหรับคุณลักษณะที่สำคัญที่สุดห้าประการของคลัสเตอร์ #0

การเลือกคุณสมบัติ: คลัสเตอร์ #0

ความแตกต่างสำหรับฟีเจอร์ WEALTH ที่เข้ารหัสใหม่นั้นน่าทึ่งมาก กลุ่มเป้าหมายของเรามีฐานะร่ำรวยกว่าประชากรทั่วไปอย่างเห็นได้ชัด

อีกคลัสเตอร์หนึ่งมีการนำเสนอมากเกินไปเล็กน้อย (คลัสเตอร์ #5: 13.6% เทียบกับ 12.6%) ความแตกต่างน้อยเกินไปที่จะตรวจสอบเพิ่มเติม

กลุ่มอื่นๆ ทั้งหมด (กลุ่ม #1/2/3/6/7/8) เป็นตัวแทนน้อยเกินไป กลุ่มทั้งหมดนี้ไม่ได้รับการวิเคราะห์เพิ่มเติม เนื่องจากอยู่นอกขอบเขตอย่างชัดเจนเกี่ยวกับการได้มาซึ่งลูกค้า มีข้อยกเว้นประการหนึ่งสำหรับคลัสเตอร์ #7 ซึ่งเป็นคลัสเตอร์ที่มีช่องว่างสูงสุด (1.6% เทียบกับ 12.7%) เพื่อค้นหาว่าคุณลักษณะใดที่บ่งบอกถึงบุคคลที่ตรงกันข้ามกับกลุ่มเป้าหมายของเรา

ตารางต่อไปนี้แสดงค่าเฉลี่ยและค่ามัธยฐานสำหรับคุณลักษณะที่สำคัญที่สุดห้าประการของคลัสเตอร์ #7

การเลือกคุณสมบัติ: คลัสเตอร์ #7

ความแตกต่างสำหรับฟีเจอร์ทั้งหมดนั้นควรค่าแก่การกล่าวถึง “ผู้ต่อต้านลูกค้า” ของเรามีความรับผิดชอบน้อยกว่า/มีความคิดแบบเดิมๆ (มูลค่าสูงกว่าสำหรับ SEMIO_PFLICHT) เติบโตขึ้นในทศวรรษต่อมา (หมายถึงฟีเจอร์ DECADE: ปลายยุค 70 เทียบกับต้นยุค 60) และระมัดระวังมากขึ้นเกี่ยวกับการลงทุนทางการเงิน (มูลค่าสูงกว่าสำหรับ FINANZ_ANLEGER) — สิ่งที่อาจเกี่ยวข้องกับอายุที่น้อยกว่า ดูเหมือนว่าเขา/เธออาศัยอยู่ในเยอรมนีตะวันออกมากกว่า แต่ตามที่กล่าวไว้ในการวิเคราะห์ของกลุ่ม #4 เราต้องระมัดระวังกับข้อความนั้น ในกรณีนั้นตัวเลขบอกเราว่าตรงกันข้ามกับที่เราคาดไว้ทุกประการ

คลัสเตอร์สุดท้าย (คลัสเตอร์ #9: 26.8% เทียบกับ 11.9%) ถูกเพิ่มเข้าไปในพล็อตโดยไม่ตั้งใจ ประกอบด้วยบุคคลที่มีค่าหายไปจำนวนมากซึ่งถูกแยกออกมาระหว่างการประมวลผลข้อมูลล่วงหน้า ดังนั้นคลัสเตอร์จึงไม่ถูกสร้างขึ้นในระหว่างกระบวนการจัดคลัสเตอร์ การวิเคราะห์เพิ่มเติมเพื่อค้นหาสาเหตุของเปอร์เซ็นต์ค่าที่หายไปที่สูงอาจคุ้มค่ากับความพยายาม แต่ไม่ได้รับการพิจารณาภายในโครงการ

ส่วนที่ 2: รูปแบบการเรียนรู้แบบมีผู้สอน

การวิเคราะห์

เช่นเดียวกับส่วนที่ 1 การวิเคราะห์ข้อมูลที่ให้ไว้ก็เสร็จสิ้นก่อน ชุดข้อมูลหลักสองชุดจัดทำโดย Arvato Financial Solutions เป็นไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาค:

  • MAILOUT_TRAIN (พฤษภาคม 2018): ข้อมูลประชากรสำหรับบุคคลที่เป็นเป้าหมายของแคมเปญการตลาด 42,982 คน 367 คน
  • MAILOUT_TEST (พฤษภาคม 2018): ข้อมูลประชากรสำหรับบุคคลที่เป็นเป้าหมายของแคมเปญการตลาด 42,833 คน 366 คน

เดิมทีชุดข้อมูลทั้งสองชุดมีความเชื่อมโยงกัน แต่ข้อมูลถูกแบ่งออกเป็นสองส่วนเท่าๆ กันโดยประมาณ

พาร์ติชัน MAILOUT_TRAIN มีคอลัมน์ RESPONSE ที่ระบุว่าบุคคลหนึ่งกลายเป็นลูกค้าของบริษัทหลังจากแคมเปญหรือไม่ พาร์ติชัน MAILOUT_TEST ไม่มีคอลัมน์นั้น คุณสมบัติอื่นๆ ทั้งหมดตรงกับคุณสมบัติของชุดข้อมูล AZDIAS

ในกรณีประมาณ 99% บุคคลไม่ตอบสนองต่อการส่งจดหมาย กล่าวคือ ชุดข้อมูลการฝึกอบรมไม่สมดุลอย่างยิ่ง

การประมวลผลข้อมูลล่วงหน้า

เนื่องจากคุณสมบัติที่สอดคล้องกับชุดข้อมูล MAILOUT_TRAIN ตามลำดับ MAILOUT_TEST และ AZDIAS จึงสามารถใช้ขั้นตอนการประมวลผลข้อมูลล่วงหน้าเดียวกันตามที่อธิบายไว้ในส่วนที่ 1 ได้ ดังนั้นจึงสามารถใช้ฟังก์ชันการทำความสะอาดที่นำไปใช้ได้ (ขั้นตอนที่ 1 ถึง 5) เช่นเดียวกับการนำเข้า/ปรับขนาด (ขั้นตอนที่ 6 ). อย่างไรก็ตาม การเบี่ยงเบนต่อไปนี้เป็นสิ่งที่ควรค่าแก่การกล่าวถึง:

  • ต้องแยกคอลัมน์ RESPONSE จาก MAILOUT_TRAIN ก่อนที่จะล้างข้อมูล (ใช้สำหรับการฝึกโมเดลในขั้นตอนต่อไปนี้)
  • คุณลักษณะที่ลดลงเนื่องจากเปอร์เซ็นต์ของค่าที่หายไปในระดับสูง (ขั้นตอนที่ 3) แตกต่างกับการประมวลผลของ AZDIAS/CUSTOMER: แม้ว่าเกณฑ์ (=0.25) ยังคงเหมือนเดิม แต่มีคุณลักษณะเดียวเท่านั้น (KK_KUNDENTYP) เท่านั้นที่ถูกทิ้งเพิ่มเติม
  • การยกเลิกแถวเนื่องจากค่าที่หายไปเป็นเปอร์เซ็นต์สูง (ขั้นตอนที่ 4) ไม่ได้ถูกนำมาใช้: วิธีนี้สะดวกที่จะรับกลุ่มเพิ่มเติมสำหรับการแบ่งส่วนลูกค้า แต่จะส่งผลเสียต่อโมเดลการเรียนรู้ภายใต้การดูแลของเราเนื่องจากความไม่สมดุลของชุดข้อมูล ( วางแถวที่มีค่า RESPONSE เป็นบวก)

การนำไปปฏิบัติ

ชั้นเรียนที่สำคัญที่สุดสำหรับการนำโมเดลการเรียนรู้แบบมีผู้สอนไปใช้ในการทำนายว่าบุคคลใดมีแนวโน้มที่จะเปลี่ยนมาเป็นลูกค้าของบริษัทมากที่สุดคือ GridSearchCV ของ sklearn นอกจากการป้อนด้วยตัวแยกประเภทแล้ว ยังใช้พารามิเตอร์ที่สำคัญต่อไปนี้ด้วย:

  • param_grid: ชื่อพารามิเตอร์สำหรับการปรับแต่งลักษณนาม
  • การให้คะแนน: วิธีการประเมินผล
  • CV: กำหนดกลยุทธ์การแยกการตรวจสอบข้าม

ขั้นตอนแรกในการค้นหาแบบจำลองที่มีประสิทธิภาพการจำแนกประเภทที่เพียงพอคือการทดสอบอัลกอริธึมการจำแนกประเภทต่างๆ ในรูปแบบพื้นฐาน กล่าวคือ โดยไม่ต้องปรับแต่ง ดังนั้นอัลกอริทึมจึงเหมาะสมกับ MAILOUT_TRAIN และคอลัมน์ RESPONSE ที่แยกออกมา

ตัวแยกประเภทที่มีแนวโน้มดีที่สุดจึงถูกนำไปใช้ในภายหลัง ได้รับการปรับแต่งผ่านพารามิเตอร์ param_grid ของ GridSearchCV ด้วยตัวแยกประเภท ทำให้สามารถวิเคราะห์คุณสมบัติที่สำคัญที่สุดได้โดยตรง (การเลือกคุณสมบัติ)

ในที่สุดแบบจำลองผลลัพธ์ก็ถูกนำมาใช้เพื่อทำนายความน่าจะเป็นสำหรับชุดข้อมูล MAILOUT_TEST

ภาวะแทรกซ้อน

ภาวะแทรกซ้อนที่ใช้เวลานานที่สุดนั้นขึ้นอยู่กับการตีความที่ผิดภายในการประมวลผลข้อมูลล่วงหน้า สันนิษฐานอย่างผิดพลาดว่าคุณลักษณะเดียวกันที่มีค่าที่หายไปเป็นเปอร์เซ็นต์สูงในชุดข้อมูล AZDIAS จะต้องถูกละทิ้งสำหรับ MAILOUT_TRAIN/MAILOUT_TEST สิ่งนี้ส่งผลให้ประสิทธิภาพที่แย่มากสำหรับตัวแยกประเภทที่ใช้ทั้งหมด (แย่กว่าอย่างน้อย 20%)

พบสาเหตุ (ผิด) ทันที: ชุดข้อมูลไม่สมดุล การสุ่มตัวอย่างใหม่และ/หรือการเปลี่ยนแปลงน้ำหนักของชั้นเรียนตามที่อธิบายไว้ในบล็อกโพสต์ต่างๆ (ดูข้อมูลอ้างอิง [1] และ [2]) ต้องเป็นคำตอบ แต่น่าเสียดายที่ไม่ได้เป็นอย่างนั้น ความพยายามทั้งหมดกับไลบรารี imblearn (ย่อมาจากการเรียนรู้ที่ไม่สมดุล), SMOTE (Synthetic Minority Over-sampling Technique) และน้ำหนักของคลาส (สามารถตั้งค่าผ่านพารามิเตอร์สำหรับตัวแยกประเภทต่างๆ class_weight: 'balanced') ล้มเหลว

การปรับแต่ง

ต้องมีการปรับปรุงบางสิ่งระหว่างการใช้งาน:

  • ภาวะแทรกซ้อนที่อธิบายไว้ในส่วนข้างต้นต้องได้รับการแก้ไขโดยมอบรายการคุณสมบัติอื่นๆ ที่จะยกเลิกโดยฟังก์ชันการทำความสะอาด
  • เดิมทีฟังก์ชันการทำความสะอาดไม่ได้ออกแบบมาเพื่อข้ามการวางแถวที่มีค่าที่หายไปเป็นเปอร์เซ็นต์สูง แต่นี่เป็นสิ่งจำเป็นในส่วนที่ 2 ของโครงการ ดังนั้นจึงต้องมีการออกแบบใหม่
  • การตรวจสอบข้ามและการให้คะแนนถูกนำมาใช้ด้วยตนเองในตอนแรก หลังจากแนะนำ GridSearchCV สำหรับการปรับแต่งโมเดลแล้ว ทั้งสองฟังก์ชันก็สามารถถูกแทนที่ด้วยพารามิเตอร์ของ GridSearchCV ได้

ผลลัพธ์

ดูเหมือนว่าความแม่นยำจะไม่ใช่วิธีการประเมินประสิทธิภาพที่เหมาะสมสำหรับชุดข้อมูลที่ไม่สมดุล แทนที่จะใช้ ROC AUC เพื่อประเมินประสิทธิภาพ (ดูข้อมูลอ้างอิง [1])

นอกจากนี้ การตรวจสอบความถูกต้องข้ามยังถูกนำมาใช้โดยอัตโนมัติโดยใช้ GridSearchCV ซึ่งจะเพิ่มความคงทนโดยไม่ลดข้อมูลการฝึกอบรม จะดียิ่งขึ้นไปอีก: GridSearchCV ใช้ StratifiedKFold สำหรับตัวแยกประเภท StratifiedKFold จะรักษาความสัมพันธ์ของคอลัมน์เอาต์พุต ซึ่งเป็นข้อดีอีกประการหนึ่งเมื่อทำงานกับข้อมูลที่ไม่สมดุล

ตารางต่อไปนี้แสดงประสิทธิภาพพื้นฐานของตัวแยกประเภทที่ใช้บางส่วน:

ประสิทธิภาพพื้นฐานของลักษณนาม

จากนั้น GradientBoostingClassifier (ซึ่งมีแนวโน้มมากที่สุด) จะถูกปรับด้วยพารามิเตอร์ที่แตกต่างกัน ชุดพารามิเตอร์บางชุด (การสูญเสีย: เอ็กซ์โพเนนเชียล / ค่าเริ่มต้น: ส่วนเบี่ยงเบน, max_deviance: 2 / ค่าเริ่มต้น: 3, n_estimators: 80 / ค่าเริ่มต้น 100) นำไปสู่ประสิทธิภาพที่ดีขึ้นที่ 0.770805086873 สำหรับ MAILOUT_TRAIN และได้รับคะแนน ROC AUC สุดท้ายที่ 0.79627 สำหรับ MAILOUT_TEST

คำอธิบายเกี่ยวกับประสิทธิภาพที่ดีของ Gradient Boosting นั้นเป็นแนวทางในตัวที่ต่อสู้กับความไม่สมดุลของคลาส โดยจะสร้างชุดการฝึกต่อเนื่องตามตัวอย่างที่จำแนกอย่างไม่ถูกต้อง (ดูข้อมูลอ้างอิง [2])

การเลือกคุณลักษณะแสดงให้เห็นว่า D19_SOZIALES (กิจกรรมการทำธุรกรรมตามกลุ่มผลิตภัณฑ์) ที่มี 18.5% ถือเป็นคุณลักษณะที่มีอิทธิพลมากที่สุดเมื่อติดตั้งตัวแยกประเภท นี่ถือเป็นข้อสังเกตข้างเคียงและไม่มีผลกระทบใดๆ ทั้งสิ้น

บทสรุป

จำเป็นต้องใช้ CRISP-DM (กระบวนการมาตรฐานอุตสาหกรรม CRoss สำหรับการขุดข้อมูล) ส่วนใหญ่กับทั้งสองส่วนของโครงการ ความเข้าใจทางธุรกิจถูกรวมไว้เป็นส่วนหนึ่งของคำอธิบายปัญหา แต่การทำความเข้าใจข้อมูล การเตรียมข้อมูล การสร้างแบบจำลอง และการประเมินผล จะต้องได้รับการพัฒนาตั้งแต่เริ่มต้น กฎทั่วไปที่ว่าการเตรียมข้อมูลเป็นส่วนที่ใช้เวลามากที่สุดในกระบวนการสามารถตรวจสอบได้อีกครั้ง

ส่วนที่ 1 แสดงให้เห็นว่าเทคนิคการเรียนรู้แบบไม่มีผู้ดูแล เช่น PCA และ Clustering with KMeans ถูกนำมาใช้เพื่อแยกแยะกลุ่มบุคคลที่อธิบายฐานลูกค้าหลักของบริษัทสั่งซื้อทางไปรษณีย์ได้ดีที่สุด รูปแบบการเรียนรู้แบบมีผู้สอนในรูปแบบของ LogisticRegression ช่วยในการระบุลักษณะสำคัญของบุคคลเหล่านี้

ส่วนที่ 2 แสดงให้เห็นวิธีที่ตรงไปตรงมาในการสร้างโมเดลการเรียนรู้แบบมีผู้สอน พิจารณาประสิทธิภาพพื้นฐานของตัวแยกประเภทต่างๆ ด้วยความช่วยเหลือของ GridSearchCV สิ่งที่มีแนวโน้มมากที่สุด — GradientBoostingClassifier — ได้รับการปรับแต่งตามลำดับให้กับชุดข้อมูลการฝึกอบรม (พิจารณาการตรวจสอบความถูกต้องข้ามแบบแบ่งชั้น) และประสิทธิภาพได้รับการประเมินผ่าน ROC AUC การวิเคราะห์สั้นๆ เกี่ยวกับคุณลักษณะที่สำคัญที่สุดจะสร้างแบบจำลองให้เสร็จสิ้น ก่อนที่จะนำไปใช้ในการคาดการณ์ชุดข้อมูลทดสอบว่าบุคคลใดในแคมเปญการตลาดมีแนวโน้มที่จะเปลี่ยนมาเป็นลูกค้ามากที่สุด

สิ่งที่น่าสนใจและยากที่สุดในขณะที่ทำงานในโครงการนี้คือผลกระทบของชุดข้อมูลที่ไม่สมดุล มันมีผลกระทบเกือบทุกขั้นตอนเมื่อสร้างโมเดลการเรียนรู้แบบมีผู้สอน: การเลือกตัวแยกประเภทที่มีกลยุทธ์ในการจัดการข้อมูลประเภทนี้ ปรับให้ตัวแยกประเภทมีการตรวจสอบความถูกต้องข้ามแบบแบ่งชั้น ซึ่งจะรักษาความไม่สมดุลและสุดท้ายคือการประเมินแบบจำลองด้วยตัวชี้วัดที่ถูกต้อง

อะไรต่อไป?

สามารถปรับปรุงการดำเนินงานเพิ่มเติมได้ ตามที่ระบุไว้ในผลลัพธ์ของส่วนที่ 1 จำเป็นต้องวิเคราะห์การแยกบุคคลที่มีค่าที่หายไปเป็นเปอร์เซ็นต์สูงด้วยวิธีที่ดีกว่า

  • คุณสมบัติอะไรบ้างที่หายไป?
  • คุณลักษณะที่ขาดหายไปมีการเชื่อมต่อกันในทางใดทางหนึ่งหรือไม่?
  • เหตุใดคุณสมบัติเหล่านี้จึงขาดหายไป?
  • นี่เป็นวิธีที่ดีที่สุดในการจัดการข้อมูลหรือไม่
  • ทางเลือกอื่น (เช่น การใส่ค่า) คืออะไร?

การตอบคำถามเหล่านี้อาจช่วยค้นหาวิธีแก้ปัญหาที่มีประสิทธิภาพดีขึ้น

นอกจากนี้ ขอบเขตของซอร์สโค้ดสำหรับการประมวลผลข้อมูลล่วงหน้า (รวมถึงการใส่ข้อมูลและการปรับขนาด) และการจำแนกประเภทสามารถจัดการได้ แต่การใช้ Pipeline ของ sklearn จะช่วยปรับปรุงคุณภาพของซอร์สโค้ดได้อย่างแน่นอน

คุณต้องการที่จะดูซอร์สโค้ดหรือไม่? สมุดบันทึก jupyter ของโปรเจ็กต์และไฟล์อ้างอิงสามารถพบได้ในที่เก็บ นี้ GitHub

อ้างอิง

[1] การจัดการชุดข้อมูลที่ไม่สมดุลในการเรียนรู้ของเครื่อง

ผู้นับถือศาสนาคริสต์นิกายโปรแตสแตนต์ Rocca วันที่ 28 มกราคม 2019