Time Splits बनाना
वीडियो में आपने देखा कि टाइम सीरीज़ के लिए डेटा को रैंडम तरीके से बाँटना क्यों जोखिमभरा होता है, क्योंकि भविष्य का डेटा हमारे मॉडल में ओवरफिटिंग कर सकता है। टाइम सीरीज़ में प्रायः नया डेटा उपलब्ध होते ही जुड़ता रहता है और आप अक्सर अपने मॉडल को इसी नए डेटा के साथ दोबारा ट्रेन करना चाहेंगे। वीडियो में हमने टेस्ट और ट्रेनिंग सेट्स के लिए प्रतिशत-आधारित स्प्लिट दिखाया था, लेकिन मान लीजिए आप उपलब्ध सभी डेटा पर ट्रेन करना चाहते हैं, सिवाय आखिरी 45 दिनों के, जिन्हें आप टेस्ट सेट के रूप में रखना चाहते हैं.
इस अभ्यास में, हम एक फंक्शन बनाएँगे जो स्प्लिट डेट निकालेगा ताकि टेस्टिंग के लिए आखिरी 45 दिनों का डेटा और बाकी ट्रेनिंग के लिए उपयोग हो। ध्यान दें कि timedelta() पहले से ही स्टैंडर्ड python लाइब्रेरी datetime से आपके लिए इम्पोर्ट किया गया है.
यह अभ्यास पाठ्यक्रम का हिस्सा है
PySpark के साथ Feature Engineering
अभ्यास निर्देश
- एक फंक्शन
train_test_split_date()बनाएँ जो एक dataframedf, स्प्लिट के लिए डेट कॉलमsplit_col, और टेस्ट सेट के दिनों की संख्याtest_daysले, जिसका डिफ़ॉल्ट मान 45 हो. split_colके लिएminऔरmaxतिथियाँ,()का उपयोग करके निकालें.max_dateसेtest_daysघटाकर टेस्ट और ट्रेनिंग सेट्स को बाँटने की तिथि निकालें। इसके लिएtimedelta()का उपयोग करें, जोdaysपैरामीटर लेता है — यहाँtest_daysपास करें.OFFMKTDATEकोsplit_colकी तरह उपयोग करते हुएsplit_dateनिकालें और उसी के आधार पर dataframe को दो नए dataframes —train_dfऔरtest_df— में फ़िल्टर करें, जहाँtest_dfमें केवल डेटा के आखिरी 45 दिनों की पंक्तियाँ हों। साथ ही, यह सुनिश्चित करें किtest_dfमें केवल वे घर हों जो split date तक लिस्ट किए जा चुके हों, इसके लिएdf['LISTDATE']कोsplit_dateसे कम या बराबर पर फ़िल्टर करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
def train_test_split_date(df, split_col, test_days=____):
"""Calculate the date to split test and training sets"""
# Find how many days our data spans
max_date = df.____({____: ____}).collect()[0][0]
min_date = df.____({____: ____}).collect()[0][0]
# Subtract an integer number of days from the last date in dataset
split_date = ____ - timedelta(days=____)
return split_date
# Find the date to use in spitting test and train
split_date = train_test_split_date(df, ____)
# Create Sequential Test and Training Sets
____ = df.where(df[____] < split_date)
____ = df.where(df[____] >= split_date).where(df[____] <= split_date)