तिथि और समय की विशेषताएँ निकालना
शिक्षार्थी datetime कॉलम को वर्ष, महीना, सप्ताह का दिन और घंटा जैसी विशेषताओं में विभाजित करेंगे तथा आवर्तिता पकड़ने वाले चक्रीय sine/cosine एन्कोडिंग बनाएँगे।
तिथि और समय की विशेषताएँ निकालना, CoddyKit पर Machine Learning Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Machine Learning Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कच्चे टाइमस्टैम्प अनुपयोगी क्यों हैं
कच्चे Unix टाइमस्टैम्प जैसे 1718784000 या डेटाटाइम स्ट्रिंग जैसे '2024-06-19 14:30:00' में दिन का घंटा, सप्ताह का दिन और वर्ष का महीना जैसी समृद्ध जानकारी होती है — लेकिन मॉडल कच्चे मान से उस जानकारी तक पहुँच नहीं सकता। रैखिक मॉडल टाइमस्टैम्प को एक बड़ी पूर्णांक संख्या के रूप में देखता है और केवल यह सीख सकता है कि बाद के टाइमस्टैम्प उच्च या निम्न टार्गेट का पूर्वानुमान देते हैं; वह सभी आवर्ती पैटर्नों को छोड़ देता है। फीचर निष्कर्षण टाइमस्टैम्प को ऐसे सार्थक संख्यात्मक घटकों में विभाजित करता है जिनका मॉडल सीधे उपयोग कर सकता है।
Pandas से डेटाटाइम कॉलम का पार्सिंग
फीचर निकालने से पहले दिनांक/समय स्ट्रिंग को pd.Timestamp या datetime64 dtype में बदलने के लिए हमेशा pd.to_datetime() का उपयोग करें। पार्स किए जाने के बाद Pandas दर्जनों एट्रिब्यूट वाला .dt एक्सेसर उपलब्ध कराता है: .dt.year, .dt.month, .dt.day, .dt.hour, .dt.minute, .dt.dayofweek (0=सोमवार), .dt.dayofyear, .dt.quarter, .dt.is_weekend और अन्य। प्रत्येक एट्रिब्यूट आपके फीचर मैट्रिक्स में एक नया पूर्णांक कॉलम बन जाता है।
import pandas as pd
dates = pd.Series(['2024-01-15 08:30:00', '2024-06-21 17:45:00', '2024-12-25 12:00:00'])
dts = pd.to_datetime(dates)
df = pd.DataFrame({
'year': dts.dt.year,
'month': dts.dt.month,
'day': dts.dt.day,
'hour': dts.dt.hour,
'dayofweek': dts.dt.dayofweek, # 0=Mon, 6=Sun
'quarter': dts.dt.quarter,
'is_weekend': (dts.dt.dayofweek >= 5).astype(int)
})
print(df.to_string())कच्चे चक्रीय फीचर की समस्या
घंटे 23 और 0 एक-दूसरे से सटे हुए हैं (एक घंटे के अंतर पर), लेकिन संख्यात्मक रूप से बहुत दूर हैं (23 इकाइयों के अंतर पर)। यदि आप घंटे को 0-23 के पूर्णांक के रूप में एन्कोड करते हैं, तो रैखिक मॉडल यह नहीं सीख सकता कि आधी रात के पैटर्न रात 11 बजे के पैटर्न के समान हैं। यही बात महीनों (दिसंबर और जनवरी पास-पास हैं), सप्ताह के दिनों (रविवार=6 और सोमवार=0) तथा किसी भी अन्य चक्रीय मात्रा पर लागू होती है। इन्हें कच्चे पूर्णांकों के रूप में लेने से चक्र की सीमा पर एक कृत्रिम असततता बनती है, जिससे मॉडलों को स्वयं निपटना पड़ता है।
साइन और कोसाइन से चक्रीय एन्कोडिंग
समाधान यह है कि चक्रीय फीचरों को साइन और कोसाइन के युग्म के रूप में एन्कोड किया जाए। 0 से T-1 तक के मान वाले चर के लिए इसे इस प्रकार एन्कोड करें: sin(2π × value / T) और cos(2π × value / T)। इससे चक्र 2D स्पेस में एक वृत्त पर मैप हो जाता है। अब घंटा 23 और घंटा 0 वृत्त पर पास-पास के बिंदु हैं, इसलिए उनके यूक्लिडीय दूरी कम है। दूरी या रैखिक संयोजन निकालने वाला कोई भी मॉडल अब साइन और कोसाइन घटकों का साथ में उपयोग करके चक्रीय पैटर्न को सही ढंग से पकड़ सकता है।
import numpy as np
import pandas as pd
hours = np.arange(24)
df = pd.DataFrame({'hour': hours})
df['hour_sin'] = np.sin(2 * np.pi * df['hour'] / 24)
df['hour_cos'] = np.cos(2 * np.pi * df['hour'] / 24)
# Distance between hour 23 and hour 0 on the circle
def circle_dist(h1, h2):
s1, c1 = df.loc[df['hour'] == h1, ['hour_sin', 'hour_cos']].values[0]
s2, c2 = df.loc[df['hour'] == h2, ['hour_sin', 'hour_cos']].values[0]
return np.sqrt((s1-s2)**2 + (c1-c2)**2)
print('Distance 23 to 0:', round(circle_dist(23, 0), 4)) # small
print('Distance 0 to 12:', round(circle_dist(0, 12), 4)) # largeकई फीचरों पर चक्रीय एन्कोडिंग लागू करना
चक्रीय एन्कोडिंग का यह तरीका किसी भी आवर्ती फीचर पर लागू होता है: महीना (T=12), सप्ताह का दिन (T=7), घंटा (T=24), मिनट (T=60), वर्ष का दिन (T=365)। प्रत्येक चक्रीय फीचर दो नए फीचर (साइन और कोसाइन) बनाता है। ट्री-आधारित मॉडलों के लिए कच्ची पूर्णांक एन्कोडिंग अक्सर पर्याप्त होती है, क्योंकि ट्री थ्रेशहोल्ड पर विभाजन करते हैं और कई विभाजनों के माध्यम से चक्रीय पैटर्न पकड़ सकते हैं। लेकिन रैखिक मॉडलों, न्यूरल नेटवर्क और दूरी-आधारित एल्गोरिदम के लिए चक्रीय एन्कोडिंग महत्वपूर्ण है।
import numpy as np
import pandas as pd
def cyclical_encode(df, col, period):
df[col + '_sin'] = np.sin(2 * np.pi * df[col] / period)
df[col + '_cos'] = np.cos(2 * np.pi * df[col] / period)
return df
df = pd.DataFrame({'hour': [8, 12, 20, 23], 'month': [1, 6, 11, 12], 'dow': [0, 2, 4, 6]})
df = cyclical_encode(df, 'hour', 24)
df = cyclical_encode(df, 'month', 12)
df = cyclical_encode(df, 'dow', 7)
print(df[['hour', 'hour_sin', 'hour_cos', 'month', 'month_sin', 'month_cos']].round(3))संदर्भ से बीता समय: सापेक्ष टाइमस्टैम्प
कभी-कभी कैलेंडर घटक निकालने के बजाय किसी घटना के बाद बीता समय अधिक महत्वपूर्ण होता है: पिछली खरीद के बाद बीते दिन, सिस्टम रीस्टार्ट के बाद बीते घंटे, या खाता बनाए जाने के बाद बीते महीने। ये सापेक्ष अवधि फीचर उन नवीनता-प्रभावों को पकड़ते हैं जिन्हें निरपेक्ष कैलेंडर फीचर नहीं पकड़ पाते। इन्हें सरल अंतर के रूप में निकालें: (now - event_date).dt.days या (now - event_date).dt.total_seconds()। ग्राहक व्यवहार मॉडलों (चर्न, LTV) और पूर्वानुमानित रखरखाव में नवीनता फीचर विशेष रूप से उपयोगी होते हैं।
import pandas as pd
import numpy as np
df = pd.DataFrame({
'last_purchase': pd.to_datetime(['2024-01-10', '2024-05-20', '2024-06-15']),
'signup_date': pd.to_datetime(['2023-01-01', '2023-06-15', '2024-01-01'])
})
reference = pd.Timestamp('2024-06-19')
df['days_since_purchase'] = (reference - df['last_purchase']).dt.days
df['account_age_days'] = (reference - df['signup_date']).dt.days
print(df[['days_since_purchase', 'account_age_days']])सप्ताहांत और कारोबारी घंटों के संकेतक
टाइमस्टैम्प से निकाले गए बूलियन संकेतक फीचर सरल होते हैं, लेकिन अक्सर बहुत प्रभावी होते हैं। is_weekend, is_business_hours, is_holiday, is_month_end — ये स्पष्ट द्विआधारी विभाजन बनाते हैं, जिनका ट्री मॉडल एक ही विभाजन में उपयोग कर सकता है। रैखिक मॉडलों को भी लाभ मिलता है, क्योंकि ये संकेतक अलग-अलग इंटरसेप्ट समायोजन बनाते हैं। सार्वजनिक अवकाश का संकेतक जोड़ना खुदरा बिक्री, यातायात और ऊर्जा खपत के मॉडलों के लिए विशेष रूप से प्रभावशाली हो सकता है, जहाँ अवकाश माँग में व्यवस्थित बदलाव लाते हैं।
import pandas as pd
dates = pd.to_datetime(['2024-06-17', '2024-06-19', '2024-06-21', '2024-06-22', '2024-12-25'])
df = pd.DataFrame({'date': dates})
df['is_weekend'] = (df['date'].dt.dayofweek >= 5).astype(int)
df['is_month_end'] = df['date'].dt.is_month_end.astype(int)
df['is_quarter_end'] = df['date'].dt.is_quarter_end.astype(int)
df['week_of_year'] = df['date'].dt.isocalendar().week.astype(int)
print(df.to_string())लैग फीचर और रोलिंग आँकड़े
समय-श्रृंखला डेटा में टार्गेट चर के पिछले मान अक्सर सबसे अच्छे पूर्वानुमानकों में शामिल होते हैं। लैग फीचर टार्गेट को N समय-चरणों से आगे खिसकाते हैं: df['target_lag1'] = df['target'].shift(1) ऐसा फीचर बनाता है जो कल के टार्गेट के बराबर होता है। रोलिंग आँकड़े हाल के इतिहास का सारांश देते हैं: df['rolling_mean_7'] = df['target'].rolling(7).mean() 7 दिनों का गतिमान औसत देता है। ये फीचर उन समयगत गति और मौसमी प्रभावों को एन्कोड करते हैं जिन्हें केवल कैलेंडर फीचर नहीं पकड़ सकते।
import pandas as pd
import numpy as np
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=10)
sales = np.array([100, 120, 95, 130, 110, 145, 160, 155, 170, 180])
df = pd.DataFrame({'date': dates, 'sales': sales})
df['lag_1'] = df['sales'].shift(1)
df['lag_7'] = df['sales'].shift(7)
df['rolling_mean_3'] = df['sales'].rolling(3).mean()
df['rolling_std_3'] = df['sales'].rolling(3).std()
print(df.to_string())पाइपलाइन में दिनांक फीचर संयोजित करना
लीकेज के बिना scikit-learn पाइपलाइन के अंदर दिनांक फीचर निष्कर्षण का उपयोग करने के लिए BaseEstimator और TransformerMixin का उपयोग करके एक कस्टम ट्रांसफ़ॉर्मर बनाएँ। इससे यह सुनिश्चित होता है कि क्रॉस-वैलिडेशन के प्रत्येक फोल्ड में दिनांक फीचर एकसमान और पुनरुत्पाद्य तरीके से निकाले जाएँ। लैग और रोलिंग फीचर के लिए अतिरिक्त सावधानी बरतें — पूरे डेटासेट (भविष्य के परीक्षण डेटा सहित) पर निकाले गए रोलिंग आँकड़े जानकारी लीक कर देंगे। लैग/रोलिंग फीचर हमेशा केवल प्रशिक्षण की कटऑफ दिनांक तक निकालें।
import numpy as np
import pandas as pd
from sklearn.base import BaseEstimator, TransformerMixin
class DateFeatureExtractor(BaseEstimator, TransformerMixin):
def fit(self, X, y=None):
return self
def transform(self, X):
X = X.copy()
dt = pd.to_datetime(X['date'])
X['hour'] = dt.dt.hour
X['dayofweek'] = dt.dt.dayofweek
X['month'] = dt.dt.month
X['hour_sin'] = np.sin(2 * np.pi * X['hour'] / 24)
X['hour_cos'] = np.cos(2 * np.pi * X['hour'] / 24)
X = X.drop('date', axis=1)
return X
df = pd.DataFrame({'date': ['2024-06-19 08:00', '2024-06-20 15:30'], 'value': [10, 20]})
print(DateFeatureExtractor().fit_transform(df))डोमेन ज्ञान के आधार पर फीचर चुनना
प्रभावी डेटाटाइम फीचर इंजीनियरिंग के लिए यह समझना आवश्यक है कि आपकी समस्या के लिए कौन-से समयगत पैटर्न महत्वपूर्ण हैं। राइड-शेयरिंग माँग के लिए दिन का घंटा और सप्ताह का दिन महत्वपूर्ण हैं। खुदरा बिक्री के लिए सप्ताह का दिन, वर्ष का सप्ताह, अवकाशों से निकटता और वर्ष-दर-वर्ष रुझान महत्वपूर्ण हैं। नेटवर्क घुसपैठ पहचान के लिए पिछली घटना के बाद का समय और बर्स्ट दर महत्वपूर्ण हैं। ऊर्जा खपत के लिए घंटे, दिन और तापमान के इंटरैक्शन महत्वपूर्ण हैं। फीचर इंजीनियर करने से पहले दिखाई देने वाले आवर्ती पैटर्नों की पहचान करने के लिए टार्गेट को प्रत्येक समयगत घटक के विरुद्ध प्लॉट करके शुरुआत करें।
कई समय क्षेत्रों को संभालना
जब आपका डेटासेट कई समय क्षेत्रों में फैला हो, तो फीचर निष्कर्षण से पहले टाइमस्टैम्प को हमेशा एक ही संदर्भ समय क्षेत्र में बदलें। UTC को मानक समय क्षेत्र के रूप में उपयोग करना सामान्य प्रथा है। फीचर निकालने के बाद, यदि स्थानीय पैटर्न महत्वपूर्ण हों तो आप स्थानीय समय के ऑफ़सेट फिर से लागू कर सकते हैं (जैसे, उपयोगकर्ता के व्यवहार का मॉडल बनाने के लिए UTC घंटे की तुलना में ग्राहक के स्थानीय समय का दिन का घंटा अधिक पूर्वानुमानकारी हो सकता है)। Pandas की dt.tz_localize() और dt.tz_convert() विधियाँ समय क्षेत्र का रूपांतरण आसानी से संभालती हैं।
import pandas as pd
# Timestamps in mixed timezones
timestamps = ['2024-06-19 08:00:00-05:00', # US/Chicago
'2024-06-19 14:00:00+01:00', # Europe/London
'2024-06-19 22:00:00+09:00'] # Asia/Tokyo
df = pd.DataFrame({'ts': pd.to_datetime(timestamps, utc=True)})
df['utc_hour'] = df['ts'].dt.hour # all in UTC after conversion
df['ts_ny'] = df['ts'].dt.tz_convert('America/New_York')
df['ny_hour'] = df['ts_ny'].dt.hour # local time hour
print(df[['utc_hour', 'ny_hour']])त्वरित जाँच
इस पाठ से दिनांक और समय फीचर निष्कर्षण की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: कच्चे टाइमस्टैम्प को फीचर के रूप में उपयोग करने से पहले सार्थक घटकों में विभाजित करना आवश्यक है, घंटे और महीने जैसे चक्रीय फीचरों के लिए सीमा की असततता से बचने हेतु साइन/कोसाइन एन्कोडिंग आवश्यक है, और लैग तथा रोलिंग फीचर समय-श्रृंखला पूर्वानुमान कार्यों के लिए समयगत पैटर्न एन्कोड करते हैं। अब हम Variance Threshold और SelectKBest की सहायता से अनौपचारिक फीचरों को हटाने के लिए फीचर चयन का तरीका देखेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “तिथि और समय की विशेषताएँ निकालना” पाठ निःशुल्क है?
हाँ—“तिथि और समय की विशेषताएँ निकालना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Machine Learning Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“तिथि और समय की विशेषताएँ निकालना” में मैं क्या सीखूँगा?
शिक्षार्थी datetime कॉलम को वर्ष, महीना, सप्ताह का दिन और घंटा जैसी विशेषताओं में विभाजित करेंगे तथा आवर्तिता पकड़ने वाले चक्रीय sine/cosine एन्कोडिंग बनाएँगे। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Machine Learning Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Machine Learning Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Machine Learning Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“तिथि और समय की विशेषताएँ निकालना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Machine Learning Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Machine Learning Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- नई विशेषताएँ बनाना: लॉग रूपांतरण, बिनिंग और इंटरैक्शन
- तिथि और समय की विशेषताएँ निकालना
- विशेषता चयन: विचरण सीमा और SelectKBest
- क्रॉस-वैलिडेशन के साथ पुनरावर्ती विशेषता उन्मूलन