अध्याय ५ · खण्ड I · 24 मिनेट
फिचर: यथार्थलाई स्तम्भमा बदल्ने
मोडेलले सङ्ख्याका स्तम्भ खान्छन्। वास्तविक संसारलाई — कारोबार, ऋणी, विद्यालय — उपयोगी स्तम्भको पङ्क्तिमा बदल्ने कलालाई फिचर इन्जिनियरिङ भनिन्छ। परियोजनाको अधिकांश मूल्य यहीँ बस्छ।
मोडेलले संसार देख्दैन। यसले तपाईंले दिएका स्तम्भ देख्छ। ऋण आवेदन प्रतिनिधित्व गर्ने पङ्क्तिको वास्तवमा सय आयाम छन् — ऋणीको इतिहास, ऋतु, ऋण अधिकारीसँगको सम्बन्ध, फराकिलो अर्थतन्त्र — तर मोडेलले तपाईंले समावेश गर्न छानेका स्तम्भ र हरेकमा के राख्न छान्नुभयो मात्र देख्छ। यो छनोट — मोडेललाई कुन स्तम्भ दिने, र हरेकमा के राख्ने — लाई फिचर इन्जिनियरिङ भनिन्छ, र परियोजनाको अधिकांश मूल्य चुपचाप यहीँ बस्छ।
फिचर मोडेलले प्रयोग गर्न सक्ने स्तम्भ हो
यो पाठ्यक्रममा फिचर शब्दको अर्थ हो: मोडेलले इनपुटका रूपमा व्यवहार गर्ने स्तम्भ। केही फिचर स्पष्ट हुन्छन् — loan_amount, borrower_age, district। केही व्युत्पन्न हुन्छन् — months_since_last_loan, is_first_time_borrower, loan_to_income_ratio। व्युत्पन्न प्रायः वास्तविक सङ्केत बस्ने ठाउँ हुन्।
सरल ऋण डाटासेट यस्ता स्तम्भसहित आउन सक्छ:
borrower_id, application_date, loan_amount, district, occupation, defaulted
छ स्तम्भ। यिनमा तालिम दिइएको मोडेलले आधारभूत अर्थमा काम गर्नेछ। तर उही डाटासेट, बीस मिनेटको फिचर इन्जिनियरिङपछि, यस्तो हुन सक्छ:
borrower_id, application_date, loan_amount, district, province, occupation,
occupation_category, application_month, application_dayofweek,
is_first_time_borrower, prev_loan_count, days_since_last_loan,
is_drought_year, defaulted
चौध स्तम्भ। मोडेलसँग काम गर्न धेरै बढी छ, र धेरै नयाँ स्तम्भ ठ्याक्कै मानवीय ऋण अधिकारीले जोखिम मूल्याङ्कन गर्न प्रयोग गर्ने ढाँचा हुन्।
नयाँ फिचरका चार स्रोत
तपाईंले कहिल्यै इन्जिनियर गर्ने झन्डै हरेक उपयोगी फिचर चार चालमध्ये एकबाट आउँछ:
1. विघटन। जटिल मानलाई सरलमा बाँड्नुहोस्। date year, month, dayofweek हुन्छ। address district, province हुन्छ। name first_name, family_name हुन्छ।
df["application_date"] = pd.to_datetime(df["application_date"])
df["application_month"] = df["application_date"].dt.month
df["application_dayofweek"] = df["application_date"].dt.dayofweek
df["application_year"] = df["application_date"].dt.year
2. संयोजन। दुई सरल स्तम्भ एक धनी बन्छन्। loan_amount र monthly_income loan_to_income_ratio बन्छन्। latitude र longitude distance_to_kathmandu बन्छन्। start_time र end_time duration बन्छन्।
df["loan_to_income_ratio"] = df["loan_amount"] / df["monthly_income"]
3. इतिहासमा सङ्कलन। उही अस्तित्वका विगत पङ्क्ति हेर्नुहोस्। हरेक ऋणीका लागि, यसअघि कति ऋण लिएका छन् गन्नुहोस्। हरेक जिल्लाका लागि, ऐतिहासिक औसत डिफल्ट दर गणना गर्नुहोस्।
df["prev_loan_count"] = df.sort_values("application_date").groupby("borrower_id").cumcount()
4. बाह्य सन्दर्भ। डाटासेट बाहिरबाट स्तम्भ ल्याउनुहोस्। के 2023 खडेरी वर्ष थियो? के आवेदन चाडपर्व ऋतुमा गरिएको थियो? त्यो हप्ता NEPSE सूचक के थियो? यीमध्ये हरेकले स्तम्भ बन्छ।
drought_years = {2014, 2017, 2023}
df["is_drought_year"] = df["application_year"].isin(drought_years).astype(int)
फिचर इन्जिनियरिङको अधिकांश काम यी चार चालको कुनै संयोजन हो। एक पटक चार दिमागमा आएपछि, तपाईं यिनलाई जताततै देख्न थाल्नुहुन्छ।
कार्यगत उदाहरण: ऋण पङ्क्तिलाई फिचरमा बदल्ने
एकल कच्चा पङ्क्तिबाट सुरु गर्दै:
{
"borrower_id": "B-12847",
"application_date": "2024-08-15",
"loan_amount": 50000,
"monthly_income": 18000,
"district": "Morang",
"occupation": "Tea stall owner",
"defaulted": True,
}
फिचर इन्जिनियरिङपछि, उही पङ्क्ति यसरी समृद्ध हुन्छ:
{
"borrower_id": "B-12847",
"loan_amount": 50000,
"log_loan_amount": 10.82, # बाङ्गोपनका लागि लग-रूपान्तरित
"monthly_income": 18000,
"loan_to_income_ratio": 2.78, # संयोजन फिचर
"district": "Morang",
"province": "Province 1", # विघटन + लुकअप
"occupation": "Tea stall owner",
"occupation_category": "small_business", # मोटो श्रेणीमा नक्साङ्कन
"application_month": 8, # विघटन
"application_dayofweek": 3, # विघटन (बिहीबार)
"application_quarter": 3, # विघटन
"is_festival_season": False, # बाह्य सन्दर्भ (दशैं/तिहार महिना)
"is_drought_year": True, # बाह्य सन्दर्भ
"prev_loan_count": 0, # इतिहासमा सङ्कलन
"is_first_time_borrower": True, # इतिहासमा सङ्कलन
"defaulted": True,
}
छ को सट्टा सोह्र फिचर। प्रत्येक कच्चा डाटा र सानो बाह्य सन्दर्भबाट गणनायोग्य हुन्छ। मोडेलसँग अब काम गर्न धेरै बढी छ — र महत्त्वपूर्ण रूपमा, फिचरले विचारशील ऋण अधिकारीले पहिले नै गर्ने निर्णयलाई इन्कोड गर्छन्।
तीन जाल जुन हटाउनुपर्छ
जाल 1: लक्ष्य समावेश गर्ने। तपाईं पूर्वानुमान गर्न खोज्ने नतिजा बाट व्युत्पन्न फिचरलाई लीकेज भनिन्छ, र यसले तपाईंको मोडेललाई तालिममा जादुमय बनाउँछ र उत्पादनमा पूर्ण रूपमा विफल बनाउँछ। “के यो ऋण डिफल्टपछि रोल ओभर भयो” स्तम्भ “के ऋण डिफल्ट भयो” को डाउनस्ट्रिम हो — यसलाई फिचरका रूपमा समावेश गर्दा मोडेललाई धोका दिन दिन्छ। सधैं सोध्नुहोस्: “के पूर्वानुमान गर्न आवश्यक हुने समयमा यो मान थाहा हुन सक्थ्यो?” यदि होइन भने, छाड्नुहोस्।
जाल 2: भविष्यको जानकारी। समय-शृङ्खला डाटासेट यसले भरिएका छन्। सबै डाटा प्रयोग गरेर “यो जिल्लामा औसत डिफल्ट दर” सङ्कलन गर्नु लीकेज हो; प्रत्येक पङ्क्तिको मितिसम्मको डाटा मात्र प्रयोग गर्नु वैध हो। pandas का expanding() र rolling() फङ्क्सनले यो सही गर्न मद्दत गर्छन्।
जाल 3: One-hot विस्फोट। हजारौं अद्वितीय मान भएको श्रेणीगत स्तम्भ (हरेक borrower_id, हरेक सडक ठेगाना), नैरेभ इन्कोड गरिँदा, हजारौं नयाँ स्तम्भ र अधिक-फिट हुने मोडेल उत्पादन गर्छ। हामी अर्को खण्डमा इन्कोडिङ छलफल गर्छौं, तर सिद्धान्त यो हो: उच्च-कार्डिनालिटी श्रेणीगतलाई सोच चाहिन्छ, अन्धाधुन्ध इन्कोडिङ होइन।
व्यवहारिक कार्यप्रवाह
नयाँ डाटासेटका लागि, फिचर-इन्जिनियरिङ प्रहार सामान्यतया यस्तो देखिन्छ:
- पहिले विघटन। मिति → मिति भाग। ठेगाना → जिल्ला। सजिलो, यान्त्रिक, झन्डै सधैं उपयोगी।
- डोमेन संयोजन अर्को। डोमेन जान्ने कसैसँग कुरा गर्नुहोस्। तिनले यो निर्णय गर्दा हेर्ने अनुपात, फरक, अवधि के हुन्? ती स्तम्भ बनाउनुहोस्।
- इतिहास सङ्कलन। हरेक अस्तित्व (ऋणी, ग्राहक, विद्यालय) का लागि, तिनको विगत गन्ती र सङ्कलन गर्नुहोस्। समय-क्रम जालप्रति सावधान हुनुहोस्।
- अन्त्यमा बाह्य सन्दर्भ। आवश्यकताअनुसार पात्रो, बिदा, मौसम, विनिमय दर ल्याउनुहोस्।
इन्जिनियर गरिएको DataFrame बचाउनुहोस् र आफ्नो data/README.md मा हरेक नयाँ स्तम्भ कागजात गर्नुहोस् — यसको अर्थ, कसरी गणना भयो, र के गलत हुन सक्छ। भविष्यको तपाईंले सम्झनुपर्छ।
आफ्नो बुझाइ जाँच्नुहोस्
Quick check
—एक टिम सदस्यले ऋण-डिफल्ट पूर्वानुमान मोडेलमा `was_loan_renewed_after_default` फिचर थप्छन्। तालिम शुद्धता 78% बाट 99% मा उछिन्छ। सम्भावित कारण र सही प्रतिक्रिया के हो?
Quick check
—तपाईं प्रशासनिक डाटाबाट नेपाली विद्यालय छाड्ने दर पूर्वानुमान गर्दै हुनुहुन्छ। कच्चा डाटामा विद्यार्थी उमेर, उपस्थिति गन्ती, परीक्षा अङ्क, र घरको ठेगाना छन्। कुन *विघटन* फिचर इन्जिनियर गर्न सबैभन्दा उपयोगी हो?
अब के आउँछ
तपाईं कुन फिचर इन्जिनियर गर्ने पहिचान गर्न सक्नुहुन्छ। अर्को खण्ड ती फिचरलाई मोडेल-तयार बनाउने बारे हो: श्रेणीगत पाठलाई सङ्ख्यामा बदल्ने (इन्कोडिङ) र सङ्ख्यात्मक फिचरलाई तुलनायोग्य स्केलमा राख्ने (स्केलिङ)। दुवै यान्त्रिक तर महत्त्वपूर्ण छन् — र दुवैमा थाहा पाउन लायक नेपाली विशेषता छन्।