प्रोजेक्ट: बारिश से फसल की पैदावार का अनुमान लगाना
काल्पनिक डेटा पर एक शुरू-से-अंत तक का प्रोजेक्ट: डेटा को समझना, अलग करना (split), एक बेसलाइन तय करना, एक सीधी रेखा और एक कर्व आज़माना, और नतीजे ईमानदारी से पेश करना।
60 सेकंड में
प्रोजेक्ट: बारिश से फसल की पैदावार का अनुमान लगाना
काल्पनिक डेटा पर एक शुरू-से-अंत तक का प्रोजेक्ट: डेटा को समझना, अलग करना (split), एक बेसलाइन तय करना, एक सीधी रेखा और एक कर्व आज़माना, और नतीजे ईमानदारी से पेश करना।
प्रोजेक्ट की योजना
- 1
सवाल तय करें
मौसमी बारिश (काल्पनिक mm) के आधार पर प्रति खेत पैदावार (काल्पनिक टन प्रति हेक्टेयर) का अनुमान लगाएं। - 2
डेटा को देखें
इसका ग्राफ (plot) बनाएं। रेंज, छूटे हुए मान (missing values) और अजीब पॉइंट्स की जांच करें। - 3
अलग करें (Split)
किसी भी मॉडलिंग से पहले एक टेस्ट सेट अलग रख लें। - 4
बेसलाइन
हर खेत के लिए ट्रेनिंग डेटा के औसत का अनुमान लगाएं। - 5
मॉडल
पहले एक सीधी रेखा आज़माएं, फिर एक कर्व। सिर्फ ट्रेनिंग डेटा का इस्तेमाल करके मॉडल चुनें। - 6
एक बार टेस्ट करें
चुने गए मॉडल को टेस्ट सेट पर स्कोर करें। - 7
ईमानदारी से रिपोर्ट करें
नंबर, बेसलाइन, सीमाएं और डेटा क्या है, यह सब बताएं।
मॉडलिंग से पहले डेटा देखें
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# MADE-UP data from a formula with noise. Not real measurements.
rng = np.random.default_rng(42)
n = 200
rain_mm = rng.uniform(300, 1500, n)
yield_t = 1.0 + 0.006 * rain_mm - 0.0000032 * rain_mm ** 2 + rng.normal(0, 0.35, n)
fields = pd.DataFrame({"rain_mm": rain_mm, "yield_t_per_ha": yield_t})
print(fields.describe().round(2))
print("Missing values:", int(fields.isna().sum().sum()))
plt.scatter(fields["rain_mm"], fields["yield_t_per_ha"], s=12)
plt.xlabel("seasonal rainfall (mm, made up)")
plt.ylabel("yield (t/ha, made up)")
plt.title("Made-up data for practice")लीनियर मॉडल को मुड़ने देना
a × rain + b होता है। अगर हम इसे दूसरे फीचर के तौर पर rain² भी दे दें, तो यह a × rain + c × rain² + b बन जाता है, जो एक पहाड़ी बना सकता है। scikit-learn का PolynomialFeatures(degree=2) आपके लिए स्क्वायर वाला कॉलम जोड़ देता है। मॉडल अपने भारों (weights) में अब भी "लीनियर" ही रहता है, लेकिन इसका आकार मुड़ सकता है।| मॉडल | यह क्या बना सकता है | जोखिम |
|---|---|---|
| बेसलाइन (औसत) | एक सपाट (flat) रेखा | बारिश को पूरी तरह नज़रअंदाज़ करता है |
| लीनियर रिग्रेशन | एक सीधी ढलान वाली रेखा | पहाड़ी के आकार का पीछा नहीं कर सकता |
| डिग्री-2 पॉलीनोमियल | एक चिकनी पहाड़ी या घाटी | यहाँ के लिए ठीक है; अगर असली आकार अलग हुआ तो गलत होगा |
| रैंडम फ़ॉरेस्ट | सीढ़ियों जैसे स्टेप्स जो डेटा का पीछा करते हैं | कम डेटा होने पर बहुत ज़्यादा उतार-चढ़ाव वाला हो सकता है |
ईमानदारी से रिपोर्ट करें
- बताएं कि डेटा काल्पनिक है, और इसे कैसे बनाया गया था।
- लेबल की यूनिट में टेस्ट एरर और बेसलाइन एरर दोनों दें।
- बताएं कि आपने मॉडल कैसे चुना, और टेस्ट सेट का इस्तेमाल सिर्फ एक बार किया गया था।
- उन चीज़ों की सूची बनाएं जिन्हें मॉडल नज़रअंदाज़ करता है: यहाँ, बारिश के अलावा सब कुछ।
- कार्य-कारण (cause and effect) का दावा न करें, या यह न कहें कि यह कहीं भी काम करेगा।
और देखें और पढ़ें
लैब
काल्पनिक डेटा पर एक पूरा, ईमानदार मिनी-प्रोजेक्ट: टेस्ट सेट अलग रखा गया, बेसलाइन, सीधी रेखा, क्रॉस-वैलिडेशन से चुना गया कर्व, एक अंतिम टेस्ट स्कोर।
समस्या
शुरुआती कोड काल्पनिक बारिश और पैदावार का डेटा बनाता है और एक टेस्ट सेट को अलग रख देता है। बाकी काम आप करें:
baseline_maeसेट करें: जब आप हर टेस्ट खेत के लिए ट्रेनिंग औसत का अनुमान लगाते हैं, तो मिलने वाला टेस्ट एरर।- सिर्फ ट्रेनिंग पंक्तियों पर 5-फोल्ड क्रॉस-वैलिडेशन के साथ दो विकल्पों की तुलना करें:
LinearRegression()औरPolynomialFeatures(degree=2)के बादLinearRegression()की पाइपलाइन।scoring="neg_mean_absolute_error"का इस्तेमाल करें। औसत CV MAE को (एक धनात्मक संख्या के रूप में)cv_mae["line"]औरcv_mae["curve"]में स्टोर करें। - कम CV MAE वाले विकल्प को चुनें, इसे सभी ट्रेनिंग पंक्तियों पर फिट करें, और इसे
best_modelनाम दें। - अब और केवल अब,
best_maeको इसके टेस्ट MAE पर सेट करें। - तीन लाइनों की एक रिपोर्ट प्रिंट करें: डेटा काल्पनिक है; बेसलाइन बनाम मॉडल का टेस्ट एरर; बारिश की वह रेंज जिस पर मॉडल का टेस्ट किया गया था।
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आप यहाँ असली फॉर्मूला जानते हैं, क्योंकि डेटा आपने ही बनाया है। इससे आपको अपने तरीके का आकलन करने में कैसे मदद मिलती है, और आप असली डेटा के साथ ऐसा कभी क्यों नहीं कर सकते?दिखाएं
आप जांच सकते हैं कि मॉडल ने असली आकार ढूंढ लिया या नहीं: फिट किया गया कर्व वहीं पीक पर होना चाहिए जहाँ फॉर्मूला पीक पर पहुँचता है (यहाँ 950 mm से थोड़ा कम)। इससे आपको पता चलता है कि पैटर्न मालूम होने पर यह तरीका काम करता है। असली डेटा के साथ असली नियम पता नहीं होता, इसलिए आप केवल अनदेखे डेटा पर ईमानदार टेस्ट से ही अंदाज़ा लगा सकते हैं, इसीलिए इस कोर्स की आदतें मायने रखती हैं।
Q2एक दोस्त विकल्पों में डिग्री 10 जोड़ने का सुझाव देता है क्योंकि "जितना ज़्यादा फ्लेक्सिबल, उतना बेहतर"। आप क्या उम्मीद करेंगे, और यह प्रक्रिया आपकी रक्षा कैसे करेगी?दिखाएं
एक डिग्री-10 कर्व नॉइज़ में फिट होने के लिए बहुत ज़्यादा मुड़ सकता है, खासकर डेटा के किनारों के पास, इसलिए यह संभवतः ओवरफिट हो जाएगा (और बारिश की बड़ी घातें बिना स्केलिंग के संख्यात्मक समस्याएँ पैदा कर सकती हैं)। क्योंकि आप ट्रेनिंग पंक्तियों पर क्रॉस-वैलिडेशन से चुनाव करते हैं, इसलिए जो मॉडल ओवरफिट होगा वह खराब CV एरर दिखाएगा और उसे नहीं चुना जाएगा। अलग रखा गया टेस्ट सेट हर हाल में एक अंतिम निष्पक्ष जांच देता है।
अक्सर पूछे जाने वाले सवाल
फसल का असली डेटा इस्तेमाल क्यों न करें?
असली डेटा ही अंतिम लक्ष्य है, लेकिन इसमें सावधानी चाहिए: अनुमति, सफ़ाई और कई अन्य फीचर्स। काल्पनिक डेटा आपको तब सारे कदम सीखने देता है जब आपको असली पैटर्न पहले से पता होता है, ताकि आप देख सकें कि आपका मॉडल उसे ढूंढ पाता है या नहीं। जब आप असली डेटा पर जाएं, तो स्रोत और उसके लाइसेंस की जांच करें, और ज़्यादा गड़बड़ी की उम्मीद रखें।
टेस्ट सेट को छुए बिना मैं सीधी रेखा और कर्व के बीच कैसे चुनूं?
ट्रेनिंग पंक्तियों पर क्रॉस-वैलिडेशन का इस्तेमाल करें। हर मॉडल के औसत एरर की तुलना करें, बेहतर मॉडल चुनें, और उसके बाद ही टेस्ट सेट पर एक बार उसका स्कोर निकालें।
क्या होगा अगर मॉडल का इस्तेमाल डेटा की रेंज के बाहर किया जाए?
ट्रेनिंग में देखी गई रेंज से बाहर के अनुमान सिर्फ अंदाज़े होते हैं। डिग्री-2 कर्व डेटा से परे हमेशा के लिए गिरता (या बढ़ता) रहता है। हमेशा वह रेंज बताएं जिस पर मॉडल को ट्रेन और टेस्ट किया गया था।
क्या कम एरर हमेशा बेहतर होता है?
कम टेस्ट एरर बेहतर होता है अगर टेस्ट निष्पक्ष हो। लेकिन सादगी पर भी विचार करें, यह भी देखें कि अलग-अलग स्प्लिट्स में नतीजा कितना स्थिर रहता है, और क्या लोग मॉडल को समझ और जांच सकते हैं।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।