การเรียนรู้ของเครื่อง - คุณสมบัติด้านวิศวกรรมจากข้อมูลวันที่ / เวลา


45

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

ตัวอย่างเช่นหากในชุดข้อมูลมีคอลัมน์ที่มีการประทับเวลาของเหตุการณ์เช่น "2014-05-05" คุณจะแยกคุณลักษณะที่มีประโยชน์จากคอลัมน์นี้ได้อย่างไร?

ขอบคุณล่วงหน้า!

คำตอบ:


44

ฉันจะเริ่มต้นด้วยการสร้างกราฟของตัวแปรเวลาเทียบกับตัวแปรอื่น ๆ และค้นหาแนวโน้ม

ตัวอย่างเช่น

ป้อนคำอธิบายรูปภาพที่นี่

ในกรณีนี้มีแนวโน้มรายสัปดาห์เป็นระยะและมีแนวโน้มสูงขึ้นในระยะยาว ดังนั้นคุณต้องการเข้ารหัสสองตัวแปรเวลา:

  • day_of_week
  • absolute_time

โดยทั่วไปแล้ว

มีกรอบเวลาทั่วไปหลายแบบที่แนวโน้มเกิดขึ้น:

  • absolute_time
  • day_of_year
  • day_of_week
  • month_of_year
  • hour_of_day
  • minute_of_hour

มองหาแนวโน้มในสิ่งเหล่านี้

แนวโน้มแปลก ๆ

มองหาแนวโน้มแปลก ๆ เช่นกัน ตัวอย่างเช่นคุณอาจเห็นแนวโน้มตามเวลาที่หายาก แต่ยังคงอยู่:

  • is_easter
  • is_superbowl
  • is_national_emergency
  • etc.

สิ่งเหล่านี้ต้องการให้คุณอ้างอิงข้อมูลกับแหล่งภายนอกที่แมปเหตุการณ์เป็นระยะ ๆ

ทำไมกราฟ

มีสองเหตุผลที่ฉันคิดว่าการสร้างกราฟนั้นสำคัญมาก

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

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


7

แบ่งข้อมูลออกเป็น windows และค้นหาคุณลักษณะสำหรับหน้าต่างเหล่านั้นเช่นค่าสัมประสิทธิ์สหสัมพันธ์อัตโนมัติเวฟเล็ต ฯลฯ และใช้คุณลักษณะเหล่านั้นเพื่อการเรียนรู้

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


7

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


6

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

หวังว่านี่จะตอบคำถามของคุณ ถ้าไม่ได้โปรดเจาะจงให้มากขึ้นกับสิ่งที่คุณพยายามจะทำให้สำเร็จ


4

ดังที่BenและNarอธิบายไว้เป็นอย่างดีการทำลายวัตถุวันที่ลงในกลุ่มของวันที่และเวลาจะช่วยตรวจสอบแนวโน้มตามฤดูกาลซึ่งวัตถุวันที่และเวลาที่สมบูรณ์แบบ

คุณไม่ได้พูดถึงอัลกอริธึมการเรียนรู้เครื่องเฉพาะเจาะจงใด ๆ ที่คุณสนใจ แต่ในกรณีที่คุณสนใจการจัดกลุ่มตามระยะทางเช่น k-mean ฉันจะทำให้วัตถุวันที่และเวลาเป็นรูปแบบ unix-time . สิ่งนี้จะช่วยให้การเปรียบเทียบระยะทางตัวเลขง่าย ๆ สำหรับอัลกอริทึมเพียงแค่ระบุว่าค่าวันที่ 2 ไกลแค่ไหน

ในตัวอย่างของคุณฉันจะสรุปค่าวันที่เท่านั้น 2014-05-05 ถึง 1399248000 (เวลา unix แสดงการเริ่มต้นของ 5 พฤษภาคม 2014, UTC)

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


3

เบ็นกำลังพูดถึงคุณสมบัติคงที่และใช้ประโยชน์จากคุณสมบัติบันทึกเวลา

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

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

ตัวอย่างเล็ก ๆ น้อย ๆ : มีข้อมูลการใช้ไฟฟ้ารายปีตั้งแต่ปี 1991 ถึง 2015 ฉันต้องการทำนายการใช้ไฟฟ้าในอนาคต 5 ปี 2016 ถึง 2020 ฉันจะคำนวณ 5 ปีที่ผ่านมาค่าเฉลี่ยเคลื่อนที่ของการใช้ไฟฟ้าเป็นค่าคุณลักษณะของปี 2020 แต่ เราไม่ทราบว่า 2016 ถึง 2020 ดังนั้นเราจึงเป็นผู้นำ (ตรงข้ามความล่าช้า) ของอนุกรมเวลา 5 ปีให้ทำค่าเฉลี่ยเคลื่อนที่ในปี 2010 ถึง 2015 จากนั้นใช้ค่านี้เป็นค่าคุณลักษณะของปี 2020 ดังนั้นเราสามารถสร้างข้อมูลคุณลักษณะในอนาคต 5 ปี

ขั้นตอนต่อไปคือการใช้ฟังก์ชั่นการเคลื่อนไหว (count \ mean \ median \ min \ max.etc) และลองใช้หน้าต่างอื่นจากนั้นคุณจะสร้างฟีเจอร์มากมาย!


2

ขึ้นอยู่กับสิ่งที่คุณสนใจด้วยข้อมูลวันที่ / เวลาคุณอาจต้องการลบทิ้ง ตัวอย่างเช่นหากคุณสนใจระยะทางจากจุดเริ่มต้น (เช่น 1 มกราคม 2015) และคุณต้องการวัดในหน่วยเดือนฉันจะใช้รหัสเป็นเดือน 1 (สำหรับ 1-31 ม.ค. 2015), 2 (1-28 ก.พ. 2558), 3, 4, 5, 6, ฯลฯ เนื่องจากระยะห่างระหว่างวันที่เริ่มต้นจะเท่ากันดังนั้นนี่จึงหมายถึงระยะเวลาในรูปแบบต่อเนื่องที่ไม่ซับซ้อน และฉันพูดอย่างต่อเนื่องเพราะคุณสามารถพูดเดือนที่ 6.5 และรู้ว่ามันเป็นครึ่งทางจนถึงเดือนมิถุนายน 2015 จากนั้นคุณไม่ต้องกังวลเกี่ยวกับการเข้ารหัสวันที่ที่เกิดขึ้นจริงและคุณสามารถใช้วิธีการจัดประเภททั่วไปทั้งหมดของคุณ

หากคุณต้องการวัดเป็นวันฉันรู้ว่า MySql มีฟังก์ชั่น 'to_days' หากคุณใช้วิธีดึงข้อมูลก่อนการจำแนกประเภท Python อาจมีบางสิ่งที่คล้ายกันหรือใช้รูปแบบ unix-time ที่มอร์คแนะนำ

หวังว่านี่จะช่วยได้!


1

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


1

ฉันไม่รู้ว่านี่เป็นวิธีปฏิบัติทั่วไป / ดีที่สุด แต่เป็นอีกมุมมองหนึ่งของเรื่องนี้

หากคุณมีวันที่คุณสามารถใช้แต่ละฟิลด์เป็น "ตัวแปรหมวดหมู่" แทน "ตัวแปรต่อเนื่อง" วันจะมีค่าในชุด {1, 2 ... , 31}, เดือนจะมีค่าเป็น {1, ... , 12} และสำหรับปีนี้คุณเลือกค่าต่ำสุดและค่าสูงสุด และสร้างชุด

จากนั้นเนื่องจากค่าตัวเลขเฉพาะของวันเดือนและปีอาจไม่เป็นประโยชน์สำหรับการค้นหาแนวโน้มในข้อมูลให้ใช้การแทนแบบไบนารี่เพื่อเข้ารหัสค่าตัวเลขเนื่องจากคุณลักษณะแต่ละบิตเป็นบิต ตัวอย่างเช่นเดือน 5 จะเป็น0 0 0 0 1 0 0 0 0 0 0 0(11 0's 1 ในตำแหน่งที่ 5 แต่ละบิตเป็นคุณลักษณะ)

เช่นมี 10 ปีใน "ชุดปี" วันที่จะถูกแปลงเป็นเวกเตอร์ของ 43 คุณสมบัติ (= 31 + 12 + 10) การใช้ "sparse vector" จำนวนของคุณสมบัติไม่น่าจะมีปัญหา

สิ่งที่คล้ายกันสามารถทำได้สำหรับข้อมูลเวลาวันของสัปดาห์วันของเดือน ...

ทุกอย่างขึ้นอยู่กับคำถามที่คุณต้องการให้แบบจำลองการเรียนรู้ของเครื่องตอบคำถาม


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

ฉันไม่เห็นสาเหตุที่ทำให้การจับ "ใกล้เคียง" ของวันที่ใกล้เคียงไม่สำเร็จ ยกตัวอย่างเช่นหากคุณป้อนฟีดไบนารีเวกเตอร์ไปยัง NN จะเป็นการทำความเข้าใจตัวเองหลังจากการฝึกอบรมที่เหมาะสม การใช้เวกเตอร์ไบนารีเป็นเพียงวิธีเดียวในการแสดงหมวดหมู่
Paco Barter

ในอินสแตนซ์นี้คุณมีคอลัมน์อย่าง "is_12" และ "is_13th" อย่างมีประสิทธิภาพซึ่งในพื้นที่อินพุตไม่เกี่ยวข้องและไม่เกี่ยวข้องกับ "is_1st" เป็นต้นในฐานะที่เป็นคุณลักษณะต่อเนื่อง ในความหมายที่ใกล้กว่า 1 และ 12 อยู่บ้าง คุณกำลังดึงดูดสิ่งที่แบบจำลองอาจอนุมาน แต่ฉันกำลังพูดถึงคุณลักษณะการป้อนข้อมูลที่เข้ารหัส
Sean Owen

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

Actuall ตามที่ @PacoBarter กล่าวว่าการเข้ารหัสแบบหนึ่งร้อนจะไม่สนใจระยะห่างที่แตกต่างกันระหว่างหมวดหมู่ สิ่งนี้ไม่สามารถแก้ไขได้อย่างง่ายดายเนื่องจากคุณสมบัติเหล่านี้เป็นข้อมูลเฟสที่แท้จริงในขณะที่โมเดลการเรียนรู้ของเครื่องส่วนใหญ่ไม่มีอินพุตชนิดเฟส ตัวชี้วัด DIY เกี่ยวกับระยะทางอาจทำเช่นนั้น
plpopk

0

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

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

  1. วิธีการพยากรณ์ทางสถิติและเครื่องจักรเพื่อการเรียนรู้: ความกังวลและหนทางข้างหน้าโดย Spyros Makridakis และคณะ บทความชี้ให้เห็นว่าสำหรับอนุกรมเวลาหลาย ๆ ครั้งการวิเคราะห์อนุกรมเวลาแบบสถิติเชิงสถิติมีประสิทธิภาพสูงกว่าโมเดลการเรียนรู้ของเครื่อง (ML) ในสาระสำคัญ ML มีแนวโน้มที่จะทำให้เหมาะสมมากเกินไปและสมมติฐานของ ML โมเดลใด ๆ ที่เกี่ยวข้องกับรายการอิสระถูกละเมิด
  2. Simple Versus Complex Forecasting: หลักฐานโดย Kesten C Green และคณะ บทความจะเปรียบเทียบและตรวจสอบเอาต์พุตอนุกรมของเพียร์ที่ตรวจทานแล้วการรายงานบทความการวิเคราะห์อนุกรมเวลาโดยมีและไม่มีการเปรียบเทียบกับรุ่นต่างๆ โดยสรุปนักวิจัยมีความยุ่งยากในการวิเคราะห์ด้วยแบบจำลองซึ่งยากต่อการตีความและมีประสิทธิภาพที่แย่ลง โดยทั่วไปสิ่งนี้เกิดขึ้นเนื่องจากโครงสร้างแรงจูงใจไม่ดี

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

ไชโย

ทรัพยากรเพื่อการเรียนรู้ทางสถิติพยากรณ์ : ฉันจะเริ่มต้นโดยการทบทวนตำราเรียนฟรีโดยร็อบเจ Hyndman ที่นี่: https://otexts.org/fpp2/ ข้อความที่จะขึ้นอยู่กับแพคเกจ R ที่คุณสามารถได้อย่างง่ายดายรวมเข้ากับการวิเคราะห์ของคุณ: https://otexts.org/fpp2/appendix-using-r.html สุดท้ายโปรดโปรดทราบความแตกต่างระหว่างการตรวจสอบข้ามข้ามขวางและเวลาชุดการตรวจสอบข้ามตามที่อธิบายไว้ที่นี่: https://robjhyndman.com/hyndsight/tscv/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.