ailiteracynepal 🇳🇵
पाठ आकार

अध्याय ५ · खण्ड 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_amountmonthly_income loan_to_income_ratio बन्छन्। latitudelongitude distance_to_kathmandu बन्छन्। start_timeend_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, हरेक सडक ठेगाना), नैरेभ इन्कोड गरिँदा, हजारौं नयाँ स्तम्भ र अधिक-फिट हुने मोडेल उत्पादन गर्छ। हामी अर्को खण्डमा इन्कोडिङ छलफल गर्छौं, तर सिद्धान्त यो हो: उच्च-कार्डिनालिटी श्रेणीगतलाई सोच चाहिन्छ, अन्धाधुन्ध इन्कोडिङ होइन।

व्यवहारिक कार्यप्रवाह

नयाँ डाटासेटका लागि, फिचर-इन्जिनियरिङ प्रहार सामान्यतया यस्तो देखिन्छ:

  1. पहिले विघटन। मिति → मिति भाग। ठेगाना → जिल्ला। सजिलो, यान्त्रिक, झन्डै सधैं उपयोगी।
  2. डोमेन संयोजन अर्को। डोमेन जान्ने कसैसँग कुरा गर्नुहोस्। तिनले यो निर्णय गर्दा हेर्ने अनुपात, फरक, अवधि के हुन्? ती स्तम्भ बनाउनुहोस्।
  3. इतिहास सङ्कलन। हरेक अस्तित्व (ऋणी, ग्राहक, विद्यालय) का लागि, तिनको विगत गन्ती र सङ्कलन गर्नुहोस्। समय-क्रम जालप्रति सावधान हुनुहोस्।
  4. अन्त्यमा बाह्य सन्दर्भ। आवश्यकताअनुसार पात्रो, बिदा, मौसम, विनिमय दर ल्याउनुहोस्।

इन्जिनियर गरिएको DataFrame बचाउनुहोस् र आफ्नो data/README.md मा हरेक नयाँ स्तम्भ कागजात गर्नुहोस् — यसको अर्थ, कसरी गणना भयो, र के गलत हुन सक्छ। भविष्यको तपाईंले सम्झनुपर्छ।

आफ्नो बुझाइ जाँच्नुहोस्

Quick check

एक टिम सदस्यले ऋण-डिफल्ट पूर्वानुमान मोडेलमा `was_loan_renewed_after_default` फिचर थप्छन्। तालिम शुद्धता 78% बाट 99% मा उछिन्छ। सम्भावित कारण र सही प्रतिक्रिया के हो?

Quick check

तपाईं प्रशासनिक डाटाबाट नेपाली विद्यालय छाड्ने दर पूर्वानुमान गर्दै हुनुहुन्छ। कच्चा डाटामा विद्यार्थी उमेर, उपस्थिति गन्ती, परीक्षा अङ्क, र घरको ठेगाना छन्। कुन *विघटन* फिचर इन्जिनियर गर्न सबैभन्दा उपयोगी हो?

अब के आउँछ

तपाईं कुन फिचर इन्जिनियर गर्ने पहिचान गर्न सक्नुहुन्छ। अर्को खण्ड ती फिचरलाई मोडेल-तयार बनाउने बारे हो: श्रेणीगत पाठलाई सङ्ख्यामा बदल्ने (इन्कोडिङ) र सङ्ख्यात्मक फिचरलाई तुलनायोग्य स्केलमा राख्ने (स्केलिङ)। दुवै यान्त्रिक तर महत्त्वपूर्ण छन् — र दुवैमा थाहा पाउन लायक नेपाली विशेषता छन्।