Temporal Fusion Transformer: การพยากรณ์อนุกรมเวลาด้วยการเรียนรู้เชิงลึก — บทช่วยสอนที่สมบูรณ์

สร้างคำทำนายที่แม่นยำและตีความได้

สร้างด้วย DALE [1]

ตาม [2] หม้อแปลงฟิวชั่นชั่วคราว มีประสิทธิภาพเหนือกว่าโมเดล Deep Learning ที่โดดเด่นทั้งหมดสำหรับการพยากรณ์อนุกรมเวลา

รวมถึงจุดเด่นด้วย ต้นไม้ส่งเสริมการไล่ระดับสี แบบจำลองสำหรับข้อมูลอนุกรมเวลาแบบตาราง

แต่สิ่งที่เป็น หม้อแปลงฟิวชั่นชั่วคราว (TFT)[3] และทำไมมันถึงน่าสนใจมาก?

ในบทความนี้ เราจะอธิบายสั้นๆ ถึงความแปลกใหม่ของ หม้อแปลงฟิวชั่นชั่วคราว และสร้างโครงการแบบ end-to-end การพยากรณ์ความต้องการพลังงาน- โดยเฉพาะเราจะครอบคลุมถึง:

  • วิธีเตรียมข้อมูลของเราสำหรับรูปแบบ TFT
  • วิธีสร้าง ฝึกอบรม และประเมินโมเดล TFT
  • วิธีรับการคาดการณ์เกี่ยวกับข้อมูลการตรวจสอบและการคาดการณ์นอกตัวอย่าง
  • วิธีการคำนวณ ความสำคัญของคุณลักษณะ, รูปแบบตามฤดูกาล และ ความแข็งแกร่งของเหตุการณ์สุดขีด โดยใช้โมเดลในตัว ความสนใจที่ตีความได้ กลไก.

มาดำดิ่งกัน!

สำหรับการวิเคราะห์เชิงลึกของสถาปัตยกรรม Temporal Fusion Transformer โปรดตรวจสอบข้อมูลก่อนหน้าของฉัน บทความ.

Tจักรพรรดิ์ Fการใช้งาน Tแรนฟอร์เมอร์ (TFT) เป็นโมเดลที่ใช้ Transformer ซึ่งใช้ประโยชน์จากความสนใจในตนเองเพื่อจับการเปลี่ยนแปลงทางโลกที่ซับซ้อนของลำดับเวลาหลายลำดับ

TFT รองรับ:

  • อนุกรมเวลาหลายรายการ: เราสามารถฝึกโมเดล TFT บนอนุกรมเวลาแบบ univariate หรือ multivariate ได้หลายพันชุด
  • การพยากรณ์หลายขอบฟ้า: แบบจำลองจะแสดงการคาดการณ์หลายขั้นตอนของตัวแปรเป้าหมายตั้งแต่ 1 รายการขึ้นไป รวมถึงช่วงการคาดการณ์ด้วย
  • คุณสมบัติที่แตกต่าง: TFT รองรับคุณสมบัติหลายประเภท รวมถึงตัวแปรภายนอกแบบแปรผันตามเวลาและแบบคงที่
  • คำทำนายที่ตีความได้: การคาดการณ์สามารถตีความได้ในแง่ของความสำคัญตัวแปรและฤดูกาล

ลักษณะพิเศษประการหนึ่งคือ หม้อแปลงฟิวชั่นชั่วคราว- เราจะกล่าวถึงเรื่องนี้ในหัวข้อถัดไป

ในบรรดาโมเดลอนุกรมเวลา DL ที่โดดเด่น (เช่น ดีเออาร์[4]) TFT มีความโดดเด่นเนื่องจากรองรับคุณสมบัติประเภทต่างๆ เหล่านี้คือ:

  • เวลาที่แปรผัน ที่รู้จักกัน
  • เวลาที่แปรผัน ไม่ทราบ
  • เวลาคงที่ จริง
  • เวลาคงที่ เด็ดขาด

เช่น ลองจินตนาการว่าเรามี กรณีคาดการณ์ยอดขาย:

สมมติว่าเราต้องทำนายยอดขายของสินค้า 3 รายการ ที่ num sales เป็นตัวแปรเป้าหมาย ที่ CPI index หรือ number of visitors เป็น ไม่รู้ผันตามเวลา คุณลักษณะต่างๆ เนื่องจากทราบเฉพาะเวลาคาดการณ์เท่านั้น อย่างไรก็ตาม, holidaysและ special days เป็น ต่างเวลารู้ เหตุการณ์ที่เกิดขึ้น

พื้นที่ product id is หมวดหมู่ที่ไม่แปรผันตามเวลา (คงที่) คุณสมบัติ. คุณสมบัติอื่นๆ ที่เป็นตัวเลขและไม่ขึ้นอยู่กับเวลา เช่น yearly_revenue สามารถแบ่งได้เป็น จริงไม่แปรผันตามเวลา.

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

หมายเหตุ รูปภาพและรูปภาพทั้งหมดในบทความนี้สร้างขึ้นโดยผู้เขียน

สำหรับบทช่วยสอนนี้ เราใช้ TemporalFusionTransformer รุ่นจาก การพยากรณ์ PyTorch ไลบรารี่และ PyTorch Lightning:

pip ติดตั้งไฟฉาย pytorch-lightning pytorch_forecasting

กระบวนการทั้งหมดเกี่ยวข้องกับ 3 สิ่ง:

  1. สร้าง dataframe แพนด้าด้วยข้อมูลอนุกรมเวลาของเรา
  2. ห่อ dataframe ของเราให้เป็น ชุดข้อมูลอนุกรมเวลา ตัวอย่าง.
  3. ผ่านของเรา ชุดข้อมูลอนุกรมเวลา เช่น TemporalFusionTransformer.

พื้นที่ ชุดข้อมูลอนุกรมเวลา มีประโยชน์มากเพราะช่วยให้เราระบุว่าคุณลักษณะต่างๆ แปรผันตามเวลาหรือคงที่ นอกจากนี้ยังเป็นรูปแบบเดียวเท่านั้น TemporalFusionTransformer ยอมรับ

เรามาสร้างชุดข้อมูลการฝึกอบรมขั้นต่ำเพื่อแสดงวิธีการกันดีกว่า ชุดข้อมูลอนุกรมเวลา ผลงาน:

เราควรจัดรูปแบบข้อมูลของเราในลักษณะต่อไปนี้: กล่องสีแต่ละกล่องแสดงถึงอนุกรมเวลาที่แตกต่างกัน ซึ่งแสดงด้วยอนุกรมเวลานั้น group มูลค่า

รูปที่ 1: กรอบข้อมูล pandas Sample_data

คอลัมน์ที่สำคัญที่สุดของ dataframe ของเราคือ time_idx — เป็นตัวกำหนดลำดับของตัวอย่าง หากไม่มีข้อสังเกตที่ขาดหายไป ค่าควรเพิ่มขึ้น +1 สำหรับแต่ละอนุกรมเวลา

ต่อไป เราจะรวม dataframe ของเราเป็น ชุดข้อมูลอนุกรมเวลา ตัวอย่าง:

ข้อโต้แย้งทั้งหมดอธิบายตนเองได้: max_encoder_length กำหนดระยะเวลามองย้อนกลับและ max_prediction_length ระบุจำนวนจุดข้อมูลที่จะคาดการณ์ ในกรณีของเรา เราจะมองย้อนกลับไป 3 ก้าวในอดีตเพื่อให้ได้ผลลัพธ์ 2 คำทำนาย

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

ชุดนี้ประกอบด้วยค่าการฝึกอบรม [0,1] จากอนุกรมเวลาครั้งแรก (group 0) และค่าการทดสอบ[2,3,4]- หากคุณรันโค้ดนี้อีกครั้ง คุณจะได้รับค่าที่แตกต่างกัน เนื่องจากข้อมูลจะถูกสับเปลี่ยนตามค่าเริ่มต้น

โครงการของเราจะใช้ แผนภาพโหลดไฟฟ้า20112014 [5] ชุดข้อมูลจาก UCI สมุดบันทึกสำหรับตัวอย่างนี้สามารถดาวน์โหลดได้จาก โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม:

ชุดข้อมูลนี้ประกอบด้วยการใช้พลังงาน (เป็น KW) ของไคลเอนต์/ผู้บริโภค 370 รายที่มีความถี่ 15 นาที ข้อมูลครอบคลุมระยะเวลา 4 ปี (พ.ศ. 2011–2014)

ผู้บริโภคบางรายถูกสร้างขึ้นหลังปี 2011 ดังนั้นการใช้พลังงานในตอนแรกจึงเป็นศูนย์

เราทำการประมวลผลข้อมูลล่วงหน้าตาม [3]:

  • รวมตัวแปรเป้าหมายของเรา power_usage ตามชั่วโมง
  • ค้นหาวันที่เก่าที่สุดสำหรับทุกอนุกรมเวลาที่มีค่ากำลังไม่เป็นศูนย์
  • สร้างคุณสมบัติใหม่: month, day, hour และ day_of_week.
  • เลือกทุกวันระหว่าง 2014–01–01 และ 2014–09–07.

เริ่มกันเลย:

ดาวน์โหลดข้อมูล

wget https://archive.ics.uci.edu/ml/machine-learning-databases/00321/LD2011_2014.txt.zip
!แตกไฟล์
LD2011_2014.txt.zip

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

แต่ละคอลัมน์แสดงถึงผู้บริโภค เริ่มต้นมากที่สุด power_usage ค่าเป็น 0

ต่อไป เราจะรวบรวมข้อมูลรายชั่วโมง เนื่องจากขนาดและความซับซ้อนของโมเดล เราจึงฝึกโมเดลของเรากับผู้บริโภคเพียง 5 รายเท่านั้น (สำหรับผู้ที่มีค่าไม่เป็นศูนย์)

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

เรียกว่าดาต้าเฟรมที่ประมวลผลล่วงหน้าขั้นสุดท้าย time_df- มาพิมพ์เนื้อหากันดีกว่า:

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

การวิเคราะห์ข้อมูลเชิงสำรวจ

การเลือกผู้บริโภค 5 ราย/อนุกรมเวลาจะไม่สุ่ม ที่ power usage ของแต่ละอนุกรมเวลาจะมีคุณสมบัติที่แตกต่างกัน เช่น ค่าเฉลี่ย ดังนี้

time_df[['consumer_id','power_usage']].groupby('consumer_id').mean()

ลองพล็อตเดือนแรกของทุกอนุกรมเวลา:

2 รูป: เดือนแรกของอนุกรมเวลา/ผู้บริโภคทั้งหมด 5 รายการ

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

นอกจากนี้ โปรดสังเกตด้วยว่าวิธีการพยากรณ์อนุกรมเวลาอื่นๆ เช่น อาริมะ ต้องเป็นไปตามข้อกำหนดบางประการ (เช่น อนุกรมเวลาจะต้องหยุดนิ่งก่อน) ด้วย TFT เราสามารถปล่อยข้อมูลของเราไว้เหมือนเดิมได้

สร้าง DataLoaders

ในขั้นตอนนี้เราผ่านของเรา time_df ไป ชุดข้อมูลอนุกรมเวลา รูปแบบซึ่งมีประโยชน์อย่างมากเพราะ:

  • มันช่วยให้เราไม่ต้องเขียน Dataloader ของเราเอง
  • เราสามารถระบุได้ว่า TFT จะจัดการกับคุณสมบัติของชุดข้อมูลอย่างไร
  • เราสามารถปรับชุดข้อมูลของเราให้เป็นมาตรฐานได้อย่างง่ายดาย ในกรณีของเรา การทำให้เป็นมาตรฐานเป็นสิ่งจำเป็นเนื่องจากลำดับเวลาทั้งหมดมีขนาดต่างกัน ดังนั้นเราจึงใช้ กลุ่ม Normalizer เพื่อทำให้แต่ละอนุกรมเวลาเป็นมาตรฐานแยกกัน

แบบจำลองของเราใช้กรอบเวลามองย้อนกลับหนึ่งสัปดาห์ (7*24) เพื่อคาดการณ์การใช้พลังงานใน 24 ชั่วโมงข้างหน้า

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

โมเดลพื้นฐาน

ต่อไป ขั้นตอนที่เกือบทุกคนลืม: โมเดลพื้นฐาน โดยเฉพาะอย่างยิ่งในการพยากรณ์อนุกรมเวลา คุณจะประหลาดใจที่บ่อยครั้งที่ตัวทำนายที่ไร้เดียงสามีประสิทธิภาพเหนือกว่าแม้แต่แบบจำลองที่เพ้อฝันกว่า!

โดยพื้นฐานที่ไร้เดียงสา เราคาดการณ์กราฟการใช้พลังงานของวันก่อนหน้า:

การฝึกอบรมโมเดล Temporal Fusion Transformer

เราสามารถฝึกโมเดล TFT ของเราโดยใช้สิ่งที่คุ้นเคยได้ ครูฝึก อินเทอร์เฟซจาก PyTorch Lightning

สังเกตสิ่งต่อไปนี้:

  • เราใช้ การหยุดก่อนเวลา โทรกลับเพื่อตรวจสอบการสูญเสียการตรวจสอบ
  • เราใช้ เทนเซอร์บอร์ด เพื่อบันทึกการวัดการฝึกอบรมและการตรวจสอบของเรา
  • แบบที่เราใช้ การสูญเสียเชิงปริมาณ — การสูญเสียประเภทพิเศษที่ช่วยให้เราสามารถส่งออกช่วงเวลาการทำนายได้ หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน Quantile Loss ตรวจสอบบทความนี้.
  • เราใช้ 4 หัวความสนใจเหมือนกระดาษต้นฉบับ

ตอนนี้เราพร้อมที่จะสร้างและฝึกโมเดลของเราแล้ว:

แค่นั้นแหละ! หลังจากผ่านไป 6 ยุค EarlyStopping จะเริ่มทำงานและหยุดการฝึก

โหลดและบันทึกโมเดลที่ดีที่สุด

อย่าลืมบันทึกโมเดลของคุณ แม้ว่าเราจะสามารถดองมันได้ แต่ตัวเลือกที่ปลอดภัยที่สุดคือการรักษายุคที่ดีที่สุดไว้โดยตรง:

!zip -r model.zip lightning_logs/lightning_logs/version_1/*

หากต้องการโหลดโมเดลอีกครั้ง ให้แตกไฟล์ รุ่น.zip และดำเนินการต่อไปนี้ — เพียงจำเส้นทางโมเดลที่ดีที่สุด:

ตรวจสอบเทนเซอร์บอร์ด

ดูรายละเอียดเส้นโค้งการฝึกอบรมและการตรวจสอบความถูกต้องด้วย Tensorboard:

การประเมินแบบจำลอง

รับการคาดการณ์ในชุดการตรวจสอบความถูกต้องและคำนวณค่าเฉลี่ย P50 (ค่ามัธยฐานเชิงปริมาณ) ปิด:

อนุกรมเวลา 2 ลำดับสุดท้ายมีการสูญเสียสูงกว่าเล็กน้อยเนื่องจากขนาดสัมพัทธ์ก็สูงเช่นกัน

การคาดการณ์พล็อตเกี่ยวกับข้อมูลการตรวจสอบ

หากเราผ่าน. mode=raw บน ทำนาย() วิธีนี้ทำให้เราได้รับข้อมูลเพิ่มเติม รวมถึงคำทำนายของควอไทล์ทั้ง 7 ตัวด้วย เรายังสามารถเข้าถึงค่าความสนใจได้ (เพิ่มเติมเกี่ยวกับเรื่องนั้นในภายหลัง)

ดูรายละเอียดเพิ่มเติมที่ raw_predictions ตัวแปร:

เราใช้ plot_prediction() เพื่อสร้างแปลงของเรา แน่นอน คุณสามารถสร้างโครงเรื่องที่คุณกำหนดเองได้ — plot_prediction() มีประโยชน์พิเศษในการเพิ่มค่าความสนใจ

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

เราสร้างหนึ่งแปลงสำหรับผู้บริโภคแต่ละราย (ทั้งหมด 5 รายการ)

3 รูป: การคาดการณ์ข้อมูลการตรวจสอบความถูกต้องสำหรับ MT_002
4 รูป: การคาดการณ์ข้อมูลการตรวจสอบความถูกต้องสำหรับ MT_004
5 รูป: การคาดการณ์ข้อมูลการตรวจสอบความถูกต้องสำหรับ MT_005
6 รูป: การคาดการณ์ข้อมูลการตรวจสอบความถูกต้องสำหรับ MT_006
7 รูป: การคาดการณ์ข้อมูลการตรวจสอบความถูกต้องสำหรับ MT_008

ผลลัพธ์ค่อนข้างน่าประทับใจ

Our หม้อแปลงฟิวชั่นชั่วคราว โมเดลสามารถบันทึกพฤติกรรมของอนุกรมเวลาได้ทั้งหมด 5 อนุกรม ทั้งในเชิงฤดูกาลและขนาด!

นอกจากนี้ โปรดสังเกตว่า:

  • เราไม่ได้ทำการปรับแต่งไฮเปอร์พารามิเตอร์ใดๆ
  • เราไม่ได้ใช้เทคนิคทางวิศวกรรมฟีเจอร์แฟนซีใดๆ

ในส่วนถัดไป เราจะแสดงวิธีปรับปรุงโมเดลของเราด้วยการเพิ่มประสิทธิภาพไฮเปอร์พารามิเตอร์

การคาดการณ์พล็อตสำหรับอนุกรมเวลาที่ระบุ

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

7 รูป: ทำนายวันข้างหน้าสำหรับ MT_004 ในชุดฝึกซ้อม

In รูปที่ 7, เราวางแผนวันข้างหน้า MT_004 ผู้บริโภคสำหรับดัชนีเวลา = 26512

โปรดจำไว้ว่าคอลัมน์การจัดทำดัชนีเวลาของเรา hours_from_start เริ่มตั้งแต่ 26304 และเรารับคำทำนายได้ตั้งแต่ 26388 เป็นต้นไป (เพราะเราตั้งไว้เร็วกว่านี้) min_encoder_length=max_encoder_length // 2 ซึ่งเท่ากับ 26304 + 168//2=26388

การคาดการณ์นอกตัวอย่าง

เรามาสร้างการคาดการณ์นอกตัวอย่างกันดีกว่าจุดข้อมูลสุดท้ายของข้อมูลการตรวจสอบ ซึ่งก็คือ 2014–09–07 23:00:00

สิ่งที่เราต้องทำคือสร้าง dataframe ใหม่ที่มี:

  • จากจำนวน N=max_encoder_length วันที่ที่ผ่านมาซึ่งทำหน้าที่เป็นกรอบเวลามองย้อนกลับ — ข้อมูลตัวเข้ารหัส ในคำศัพท์ TFT
  • วันที่ในอนาคตของขนาด max_prediction_length ซึ่งเราต้องการคำนวณการคาดการณ์ของเรา — ข้อมูลตัวถอดรหัส

เราสามารถสร้างการทำนายสำหรับอนุกรมเวลาของเราทั้ง 5 อนุกรมหรือเพียงรายการเดียวก็ได้ รูป 7 แสดงการคาดการณ์นอกตัวอย่างสำหรับผู้บริโภค MT_002:

7 รูป: การคาดการณ์ล่วงหน้าวันสำหรับ MT_002

การคาดการณ์ที่แม่นยำเป็นสิ่งหนึ่ง แต่ในปัจจุบันความสามารถในการอธิบายก็มีความสำคัญเช่นกัน

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

หม้อแปลงฟิวชั่นชั่วคราว มีการตีความได้สามประเภท:

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

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

การตีความตามฤดูกาล

TFT สำรวจน้ำหนักความสนใจเพื่อทำความเข้าใจรูปแบบชั่วคราวในช่วงเวลาที่ผ่านมา

เส้นสีเทาในแปลงก่อนหน้าทั้งหมดแสดงถึงคะแนนความสนใจ ดูแปลงเหล่านั้นอีกครั้ง - คุณสังเกตเห็นอะไรไหม? รูป 8 แสดงให้เห็นการค้นพบของ รูป 7 และยังคำนึงถึงคะแนนความสนใจด้วย:

8 รูป: การคาดการณ์ล่วงหน้าวันสำหรับ MT_001 พร้อมการแสดงฤดูกาล

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

หากเราเฉลี่ยเส้นโค้งความสนใจในช่วงเวลาและอนุกรมเวลาทั้งหมด (ไม่ใช่แค่ 5 รายการที่เราใช้ในบทช่วยสอนนี้) เราจะได้รูปร่างที่ดูสมมาตรใน รูป 9 จากกระดาษ TFT:

9 รูป: รูปแบบชั่วคราวสำหรับชุดข้อมูลไฟฟ้า (แหล่ง)

คำถาม: นี่มันอะไรดีล่ะ? เราไม่สามารถประมาณรูปแบบฤดูกาลด้วยวิธีต่างๆ เช่น แปลง ACF การสลายตัวของสัญญาณเวลา ฯลฯ ได้หรือไม่

คำตอบ: จริง. อย่างไรก็ตาม การศึกษาน้ำหนักความสนใจของ TFT มีข้อดีเพิ่มเติม:

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

การตีความตามคุณลักษณะ

พื้นที่ เครือข่ายการเลือกตัวแปร ส่วนประกอบของ TFT สามารถประมาณค่าได้อย่างง่ายดาย ความสำคัญของคุณลักษณะ:

10 รูป: ให้ความสำคัญกับข้อมูลการตรวจสอบความถูกต้อง

In รูป 10เราสังเกตเห็นสิ่งต่อไปนี้:

  • พื้นที่ hour และ day_of_week มีคะแนนที่แข็งแกร่งทั้งจากการสังเกตในอดีตและตัวแปรร่วมในอนาคต เกณฑ์มาตรฐานในรายงานต้นฉบับมีข้อสรุปเดียวกัน
  • พื้นที่ power_usage เห็นได้ชัดว่าเป็นตัวแปรร่วมที่สังเกตได้มีผลกระทบมากที่สุด
  • พื้นที่ consumer_id ตรงนี้ไม่สำคัญมากเพราะเราใช้ผู้บริโภคเพียง 5 คนเท่านั้น ในรายงาน TFT ซึ่งผู้เขียนใช้ผู้บริโภคทั้งหมด 370 ราย ตัวแปรนี้มีความสำคัญมากกว่า

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

การตรวจจับเหตุการณ์ที่รุนแรง

อนุกรมเวลามีชื่อเสียงในด้านการเปลี่ยนแปลงคุณสมบัติอย่างกะทันหันในระหว่างเหตุการณ์ที่เกิดขึ้นไม่บ่อยนัก (หรือเรียกอีกอย่างว่าอนุกรมเวลา) แรงกระแทก).

ที่แย่กว่านั้นคือเหตุการณ์เหล่านั้นยังเข้าใจยากมาก ลองนึกภาพถ้าตัวแปรเป้าหมายของคุณมีความผันผวนในช่วงเวลาสั้นๆ เนื่องจากตัวแปรร่วมเปลี่ยนพฤติกรรมอย่างเงียบๆ:

นี่เป็นสัญญาณรบกวนแบบสุ่มหรือรูปแบบถาวรที่ซ่อนอยู่ซึ่งหนีจากโมเดลของเราหรือไม่

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

คุณลักษณะบางอย่างไม่มีค่าทั้งหมดอยู่ในชุดข้อมูลการตรวจสอบ ดังนั้นเราจึงแสดงเฉพาะ hour และ consumer_id:

11 รูป: การคาดการณ์เทียบกับข้อมูลจริง (ค่าเฉลี่ย) ในแต่ละชั่วโมง
12 รูป: การคาดการณ์เทียบกับค่าจริง (ค่าเฉลี่ย) บน Consumer_id

ในรูปทั้งสองรูป ผลลัพธ์ที่ได้น่าให้กำลังใจ ใน รูป 12เราสังเกตเห็นผู้บริโภครายนั้น MT_004 มีประสิทธิภาพต่ำกว่าเล็กน้อยเมื่อเทียบกับผู้บริโภครายอื่น เราสามารถตรวจสอบสิ่งนี้ได้หากเราทำให้การสูญเสีย P50 ของผู้บริโภคทุกรายเป็นมาตรฐานด้วยการใช้พลังงานโดยเฉลี่ยที่เราคำนวณไว้ก่อนหน้านี้

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

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

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

ปัญหาคือเนื่องจาก TFT เป็นรุ่นที่ใช้ Transformer คุณจะต้องมีทรัพยากรฮาร์ดแวร์จำนวนมาก!

หม้อแปลงฟิวชั่นชั่วคราว ถือเป็นก้าวสำคัญสำหรับชุมชน Time-Series อย่างไม่ต้องสงสัย

โมเดลไม่เพียงแต่บรรลุผล SOTA เท่านั้น แต่ยังให้กรอบการทำงานสำหรับการตีความการคาดการณ์อีกด้วย รุ่นนี้ยังมีจำหน่ายใน ลูกดอก ไลบรารี python ซึ่งอิงตามไลบรารี PyTorch Forecasting

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

Temporal Fusion Transformer: การพยากรณ์อนุกรมเวลาด้วยการเรียนรู้เชิงลึก - บทช่วยสอนฉบับสมบูรณ์เผยแพร่ซ้ำจากแหล่งที่มา https://towardsdatascience.com/temporal-fusion-transformer-time-series-forecasting-with-deep-learning-complete-tutorial-d32c1e51cd91?source= rss—-7f60cf5620c9—4 ทาง https://towardsdatascience.com/feed

<!–

->

ประทับเวลา:

เพิ่มเติมจาก ที่ปรึกษาบล็อคเชน