เพิ่มวิทยาการข้อมูลของคุณด้วยการจัดอันดับใน Python และ Pandas
การจัดอันดับเป็นวิธีการแปลงข้อมูลที่เรียบง่ายแต่มีประสิทธิภาพ ในบทความนี้ ผมจะอธิบายวิธีการทำงาน ประโยชน์ของมัน และวิธีที่คุณสามารถใช้วิเคราะห์ความสัมพันธ์ระหว่างตัวแปร แสดงภาพข้อมูล และแปลงคุณลักษณะต่างๆ
อันดับคืออะไร?
ค่าการจัดอันดับหมายถึงการจัดลำดับและกำหนดค่าใหม่ให้กับแต่ละค่าตามตำแหน่งตามลำดับ ตัวอย่างเช่น ถ้าเรามีค่า:
- 36
- 72
- 12
- 102
- 12 - อันดับที่ 1
- 36 - อันดับที่ 2
- 72 - อันดับ 3
- 102 - อันดับ 4
ที่นี่ อันดับถูกกำหนดจากน้อยไปหามาก (อันดับ 1 สอดคล้องกับค่าที่น้อยที่สุด) ซึ่งจากประสบการณ์ของฉันดูเหมือนจะเป็นตัวเลือกที่พบบ่อยที่สุด แต่ก็เป็นไปได้จากมากไปหาน้อย (อันดับ 1 สอดคล้องกับค่าที่มากที่สุด)
ใช้อันดับเพื่อวิเคราะห์สมาคม
ปัญหาเกี่ยวกับความสัมพันธ์
ค่า สหสัมพันธ์หรือค่าสัมประสิทธิ์ สหสัมพันธ์แบบเพียร์สัน เป็นตัววัดที่มีประโยชน์ในการกำหนดขนาดของความสัมพันธ์เชิงเส้นระหว่างตัวแปร แต่มีจุดอ่อน ประการแรก มันใช้ได้กับความสัมพันธ์เชิงเส้นเท่านั้น ประการที่สอง มีความเสี่ยงต่อค่าผิดปกติ
ลองอธิบายสิ่งนี้ ก่อนอื่น ฉันจะแสดงโครงเรื่องของข้อมูลที่ความสัมพันธ์เกือบจะสมบูรณ์แบบ:
อย่างที่คุณเห็น ความสัมพันธ์เกือบจะสูงสุดที่ 1 ทีนี้มาแก้ไขข้อมูลและดูว่าเกิดอะไรขึ้น ในการเปลี่ยนแปลงครั้งแรก ฉันจะเปลี่ยนyเป็นเลขชี้กำลังของตัวมันเอง ในการเปลี่ยนแปลงครั้งที่สอง ฉันจะเพิ่มค่าผิดปกติในช่วงกลางของอนุกรมเวลา:
ในพล็อตด้านซ้ายยังคงมีความสัมพันธ์ที่ชัดเจน แต่ไม่เป็นเชิงเส้น ด้วยเหตุนี้ ความสัมพันธ์จึงลดลงเหลือ 0.684 ในแผนภาพที่สอง ความสัมพันธ์ยังคงเป็นเส้นตรง แต่เนื่องจากค่าผิดปกติขนาดใหญ่ค่าหนึ่ง ความสัมพันธ์จึงลดลงอย่างมากเหลือ 0.329 เราสามารถหลีกเลี่ยงปัญหาเหล่านี้ได้หรือไม่?
ป้อนความสัมพันธ์ของสเปียร์แมน
ปัญหาทั้งสองนี้สามารถบรรเทาได้โดยใช้ ความสัมพันธ์ ของสเปียร์แมน วิธีการนี้ง่าย แทนที่จะคำนวณความสัมพันธ์ระหว่างค่าดิบความสัมพันธ์จะคำนวณระหว่างอันดับของค่า:
ความสัมพันธ์(อันดับ(X), อันดับ(Y))
ก่อนที่จะอธิบายว่าทำไมสิ่งนี้จึงช่วยได้ เรามาอธิบายผลกระทบของมันก่อนโดยการวางแผนอีกครั้งและคำนวณความสัมพันธ์ของสเปียร์แมน:
ตามที่แสดง ในกรณีเลขชี้กำลัง (แผนภาพด้านซ้าย) สหสัมพันธ์ของสเปียร์แมนคือ 0.999 เช่นเดียวกับสหสัมพันธ์ก่อนที่จะใช้ฟังก์ชันเอกซ์โปเนนเชียล ในกรณีของค่าผิดปกติ (พล็อตด้านขวา) ความสัมพันธ์ของ Spearman ยังคงสูงที่ 0.984 เกิดอะไรขึ้นที่นี่?
สามารถตรวจจับการเชื่อมโยงแบบไม่เชิงเส้น
ลองนึกภาพคุณมีสามลำดับข้อมูลที่แตกต่างกัน ตัวหนึ่งเพิ่มขึ้นเชิงเส้น ตัวหนึ่งเพิ่มขึ้นแบบลอการิทึม และตัวหนึ่งเพิ่มขึ้นแบบเอ็กซ์โปเนนเชียล พวกเขามีอะไรเหมือนกัน? พวกเขาทั้งหมด เพิ่มขึ้นอย่างต่อเนื่องหรือซ้ำซากจำเจ แต่โปรดทราบว่านี่ก็หมายความว่าอันดับของพวกเขาจะเหมือนกัน ดังนั้น ถ้าเราใช้ความสัมพันธ์ของ Spearman กับคู่ใดๆ ของลำดับเหล่านี้ ความสัมพันธ์จะเป็น 1! โดยการจัดอันดับ ปัจจัยเดียวที่มีผลกระทบในข้อมูลคือค่าแต่ละค่าจะมากกว่าหรือน้อยกว่าค่าอื่นๆ หรือไม่ ไม่ใช่ความแตกต่างที่แท้จริงระหว่างค่าเหล่านั้น
ลดผลกระทบจากค่าผิดปกติ
เนื่องจากลำดับเป็นสิ่งเดียวที่มีความสำคัญในความสัมพันธ์ของสเปียร์แมน หากเรามีค่า [1, 10000000000000, 2] อันดับของค่าจะเหมือนกับค่า [1, 4, 2] ดังนั้นค่าผิดปกติขนาดใหญ่และขนาดเล็กจะมีผลลดลง ผลต่างที่เป็นไปได้มากที่สุดคือความยาวของเวกเตอร์ลบ 1 (อาจน้อยกว่านี้ในกรณีที่เสมอกัน) ในทางตรงกันข้าม ค่าดิบสามารถมีความแตกต่างกันได้
ความสัมพันธ์ของอันดับและสเปียร์แมนในหมีแพนด้า
จัดอันดับข้อมูลใน Pandas ได้อย่างง่ายดาย วิธีการนี้.rank()
สามารถนำไปใช้กับทุกคอลัมน์ใน data frame หรือ series ได้ทันที ตามค่าเริ่มต้น การจัดอันดับจะเป็นจากน้อยไปมาก แต่คุณสามารถเปลี่ยนจากมากไปน้อยได้โดยใช้ascending=False
อาร์กิวเมนต์
หากมีการเสมอกัน จะใช้ค่าเฉลี่ยโดยค่าเริ่มต้น แต่พฤติกรรมนี้สามารถเปลี่ยนแปลงได้โดยใช้method
อาร์กิวเมนต์
อาร์กิวเมนต์ที่มีประโยชน์อีกอย่างคือpct
ย่อมาจาก เปอร์เซ็นไทล์ ด้วยสิ่งนี้ คุณจะคำนวณเปอร์เซ็นไทล์หรือควอไทล์ที่แต่ละจุดในข้อมูลที่สอดคล้องกัน เช่น เปอร์เซ็นต์ของข้อมูลที่ต่ำกว่าแต่ละจุด นี่เป็นเพียงอันดับปกติ
คุณยังสามารถคำนวณความสัมพันธ์ของ Spearman โดยใช้method
อาร์กิวเมนต์ใน.corr()
เช่นdf.corr(method="spearman")
ตัวอย่าง:
ดังที่เห็นได้ หลังจากใช้.rank()
ค่าทุกค่าจะเปลี่ยนเป็นลำดับตามลำดับในแต่ละคอลัมน์โดยอิสระ
การใช้อันดับสำหรับการแสดงภาพ
ข้อมูลที่จัดอันดับมีประโยชน์อย่างยิ่งสำหรับวัตถุประสงค์ในการแสดงภาพ ไม่เพียงเพราะสามารถลดผลกระทบของค่าผิดปกติ แต่ยังเพราะทำให้ข้อมูลอยู่ในการกระจายและมาตราส่วนประเภทเดียวกันด้วย ฉันจะอธิบายสิ่งนี้สำหรับตัวแปรเดียวและหลังจากนั้นหลายตัวแปรพร้อมกัน ผมจะเริ่มต้นด้วยการดึงข้อมูลอนุกรมเวลามาวิเคราะห์ ซึ่งมาจากลิงค์นี้
การแสดงภาพหนึ่งตัวแปร
ตอนนี้เรามาเห็นภาพคอลัมน์แรก (AF3):
ทางด้านซ้าย มีค่าผิดปกติขนาดใหญ่มากค่าหนึ่งที่ทำให้โครงเรื่องทั้งหมดยุ่งเหยิง ทางด้านขวา เมื่อใช้ข้อมูลจัดอันดับ โครงเรื่องจะชัดเจนขึ้นมาก โปรดทราบว่าการใช้ข้อมูลจัดอันดับมีจุดอ่อนในการสูญเสียข้อมูล ดังนั้นโปรดระวังสิ่งที่แสดงจริง การเปลี่ยนแปลงแบบสัมบูรณ์จะถูกลบออกและคุณสมบัติการกระจายเช่นเดียวกัน
การแสดงภาพหลายตัวแปร
เพื่อให้เห็นภาพตัวแปรหลายตัว ฉันจะพล็อตข้อมูลอนุกรมเวลาเป็นเมทริกซ์โดยplt.imshow
ใช้ ตัวแปรแต่ละตัวจะเป็นแถว (แกน y) และแต่ละขั้นตอนเวลาจะเป็นคอลัมน์ (แกน x) ฉันจะใช้สามขั้นตอนการประมวลผลล่วงหน้าที่แตกต่างกันเพื่อแสดงให้เห็นถึงประโยชน์ของการใช้อันดับ: ระดับมาตรฐาน ระดับต่ำสุด-สูงสุด และการจัดอันดับ:
ขนาดมาตรฐาน:
สำหรับข้อมูลมาตราส่วนมาตรฐานจะมองไม่เห็นอะไรเลย เหตุผลก็คือสเกลสีเป็นแบบเส้นตรง กล่าวคือ ถ้าค่าหนึ่งมีค่ามากกว่าค่าอื่นมาก สีของค่าที่น้อยกว่าจะใกล้เคียงกัน ในขณะที่ค่าสูงสุดจะมีเฉพาะสีสว่างเท่านั้น นอกจากนี้ เนื่องจากนี่เป็นพล็อตเดียวสำหรับคอลัมน์ทั้งหมด ค่าผิดปกติขนาดใหญ่หนึ่งค่าในหนึ่งคอลัมน์สามารถให้ทิปสเกลได้
วิธีแก้ไขคือการใช้สเกลสีแบบลอการิทึม ปัญหาคือว่าหากคุณลักษณะบางอย่างมีมาตราส่วนเชิงเส้นและบางส่วนมีมาตราส่วนลอการิทึม โครงเรื่องจะยังไม่สอดคล้องกันมาก
ปรับสเกลต่ำสุด-สูงสุด:
ตอนนี้ข้อมูลดูดีขึ้นเล็กน้อย ค่าที่มากที่สุดจะเท่ากันสำหรับทุกคอลัมน์ แต่ถึงกระนั้น ถ้าค่าที่มากที่สุดเป็นค่าผิดปกติ สีของข้อมูลที่เหลือจะเข้มขึ้น ดูคอลัมน์ O1 และ O2
จัดอันดับ:
สุดท้าย ด้วยการแปลงแบบจัดอันดับ แต่ละคอลัมน์จะถูกแสดงเท่าๆ กัน และง่ายต่อการดูว่าคอลัมน์ต่างๆ แตกต่างกันอย่างไรโดยมีความสัมพันธ์กันอย่างไร
โครงเรื่องเช่นนี้มีประโยชน์ในการทำให้เห็นภาพแนวโน้ม ตัวอย่างเช่น แนวโน้มรอบขั้นตอนเวลา 10700 จะมองเห็นได้ชัดเจนสำหรับคอลัมน์ส่วนใหญ่ จำสิ่งที่แสดงไว้เช่นเดิม ข้อมูลการกระจายเกี่ยวกับค่าผิดปกติ ค่าเอียง ฯลฯ จะถูกลบออก
การแปลงคุณสมบัติโดยใช้อันดับ
ประโยชน์เดียวกันในการลดผลกระทบของค่าผิดปกติและการลดความซับซ้อนของการกระจายจะมีประโยชน์เมื่อสร้างโมเดลแมชชีนเลิร์นนิงโดยดำเนินการแปลงคุณลักษณะจากค่าดิบเป็นอันดับ เพื่อแสดงสิ่งนี้ ฉันจะเปรียบเทียบการเปลี่ยนแปลงนี้กับการปรับขนาดมาตรฐานสำหรับ ชุดข้อมูล ที่อยู่อาศัยในแคลิฟอร์เนีย หมายเหตุ การแปลงฟีเจอร์ เช่น การปรับขนาดมาตรฐานและการใช้ข้อมูลจัดอันดับไม่จำเป็นสำหรับโมเดลแบบต้นไม้ ในการทดลองนี้ ฉันจะใช้เครือข่ายประสาทแบบฟีดฟอร์เวิร์ดจากไลบรารี sklearn เพื่อความเรียบง่าย แต่ฉันขอแนะนำ PyTorch, TensorFlow หรือไลบรารีที่คล้ายกันในทางปฏิบัติ
ก่อนอื่นมาโหลดและแยกข้อมูล:
ตอนนี้ เรามาดูกันก่อนว่าโครงข่ายประสาทเทียมอย่างง่ายที่มีการปรับขนาดมาตรฐานนั้นทำได้ดีเพียงใด:
ก่อนทำการแปลงอันดับ คุณควรตรวจสอบว่าคอลัมน์ใดจะได้ประโยชน์จากการแปลงดังกล่าว เพื่อตรวจสอบสิ่งนี้ ลองวางแผนกราฟฮิสโตแกรมของแต่ละคอลัมน์:
AveRooms, AveBedrms, Population และ AveOccup ดูเหมือนจะมีค่าผิดปกติมาก ตอนนี้ มาทำการแปลงอันดับก่อนขั้นตอนการปรับขนาดมาตรฐานในคอลัมน์เหล่านี้เท่านั้น:
ที่นี่ฉันได้สร้างคลาสที่ทำการแปลงอันดับ ขั้นแรก อันดับจะดึงมาจากข้อมูลการฝึก จากนั้นสำหรับข้อมูลการทดสอบ ข้อมูลจะถูกแมปกับอันดับที่ใกล้ที่สุดในข้อมูลการฝึก นอกจากนี้ยังมีตัวเลือกอื่นๆ เช่น หากอยู่ระหว่างอันดับให้ใช้ค่าเฉลี่ยบางประเภท ในทางปฏิบัติ คุณควรใช้ scikit-learn QuantileTransformer
แทน ซึ่งคล้ายกันและมีฟังก์ชันและตัวเลือกเพิ่มเติม
ผลลัพธ์ดีขึ้น! แน่นอนว่าอาจไม่เป็นเช่นนั้นเสมอไป แต่ก็คุ้มค่าที่จะลองแปลงคุณลักษณะต่างๆ ในระหว่างการสร้างแบบจำลองเพื่อดูว่าสามารถปรับปรุงที่สำคัญได้หรือไม่
ขอบคุณที่อ่าน!
หากคุณสนใจที่จะอ่านบทความเพิ่มเติมเกี่ยวกับวิทยาศาสตร์ข้อมูล โปรดดูรายการอ่านของฉันด้านล่าง:
หากคุณต้องการเป็นสมาชิกระดับกลาง คุณสามารถใช้ลิงก์อ้างอิง ของฉัน ได้หากต้องการ ขอให้เป็นวันที่ดี.