प्रौद्योगिकी साझेदारी

Datawhale 2024 AI Summer Camp द्वितीयचरण - विद्युत् मांग पूर्वानुमान चुनौती

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

# AIsummercamp # Datawhale # ग्रीष्मकालीन शिविर

1. प्रतियोगितायाः परिचयः

वैश्विक अर्थव्यवस्थायाः तीव्रविकासेन, नगरीकरणस्य त्वरिततायाः च कारणेन विद्युत्व्यवस्था वर्धमानानाम् आव्हानानां सम्मुखीभवति । विद्युत्माङ्गस्य सटीकपूर्वसूचना विद्युत्जालस्य स्थिरसञ्चालनस्य, प्रभावी ऊर्जाप्रबन्धनस्य, नवीकरणीय ऊर्जास्रोतानां एकीकरणस्य च कृते महत्त्वपूर्णम् अस्ति

2. घटनाकार्यम्

बहुगृहानुरूपस्य विद्युत्-उपभोग-इतिहासस्य N दिवसस्य प्रासंगिक-अनुक्रम-दत्तांशं अन्यसूचनाः च दृष्ट्वा गृहाणाम् अनुरूपं विद्युत्-उपभोगस्य पूर्वानुमानं कुर्वन्तु

२०२४ iFLYTEK AI विकासकप्रतियोगिता-iFLYTEK Open Platform  

3.Task2: उन्नत lightgbm, सुविधा अभियांत्रिकी आरभत

(1) आयात मॉड्यूल : १.अस्मिन् खण्डे कोडेन आवश्यकाः मॉड्यूल् सन्ति

  1. import numpy as np
  2. import pandas as pd
  3. import lightgbm as lgb
  4. from sklearn.metrics import mean_squared_log_error, mean_absolute_error
  5. import tqdm
  6. import sys
  7. import os
  8. import gc
  9. import argparse
  10. import warnings
  11. warnings.filterwarnings('ignore')

(2) दत्तांशसज्जता

दत्तांशसज्जीकरणपदे प्रशिक्षणदत्तांशः परीक्षणदत्तांशः च मुख्यतया पठ्यते, मूलभूतदत्तांशप्रदर्शनं च क्रियते ।

  1. train = pd.read_csv('./data/train.csv')
  2. test = pd.read_csv('./data/test.csv')

दत्तांशस्य संक्षिप्तपरिचयः : १. तेषु id गृहस्य ID अस्ति, dt दिवसपरिचयः अस्ति, न्यूनतमः प्रशिक्षणदत्तांशः dt अस्ति, तथा च भिन्नाः IDs भिन्नक्रमदीर्घतायाः अनुरूपाः सन्ति सामान्यतया समग्ररूपेण तुल्यकालिकरूपेण बृहत् अन्तरं भवति consumption of different types of houses target is the actual power consumption , यत् अस्याः स्पर्धायाः कृते अस्माकं भविष्यवाणी लक्ष्यम् अपि अस्ति। अस्मान् दत्तांशस्य सरलबोधं प्राप्तुं साहाय्यं कर्तुं निम्नलिखितम् सरलं दृश्यविश्लेषणम् अस्ति ।

  • विभिन्नप्रकारस्य अनुरूपस्य लक्ष्यस्य हिस्टोग्रामः

  1. import matplotlib.pyplot as plt
  2. # 不同type类型对应target的柱状图
  3. type_target_df = train.groupby('type')['target'].mean().reset_index()
  4. plt.figure(figsize=(8, 4))
  5. plt.bar(type_target_df['type'], type_target_df['target'], color=['blue', 'green'])
  6. plt.xlabel('Type')
  7. plt.ylabel('Average Target Value')
  8. plt.title('Bar Chart of Target by Type')
  9. plt.show()

  • dt इत्यस्य अनुसारं अनुक्रमरूपेण 00037f39cf इति id इत्यनेन सह लक्ष्यस्य रेखाचित्रम्

  1. specific_id_df = train[train['id'] == '00037f39cf']
  2. plt.figure(figsize=(10, 5))
  3. plt.plot(specific_id_df['dt'], specific_id_df['target'], marker='o', linestyle='-')
  4. plt.xlabel('DateTime')
  5. plt.ylabel('Target Value')
  6. plt.title("Line Chart of Target for ID '00037f39cf'")
  7. plt.show()

(3) विशेषता अभियांत्रिकी

अत्र वयं मुख्यतया ऐतिहासिक-अनुवाद-विशेषताः, विण्डो-सांख्यिकीय-विशेषताः च निर्मामः, प्रत्येकं विशेषता सु-आधारितं भवति, विस्तरेण च निम्नलिखितरूपेण व्याख्यातं भवति;

  • ऐतिहासिक अनुवादविशेषताः : १.पूर्वपदस्य सूचना ऐतिहासिकअनुवादद्वारा प्राप्ता भवति यथा अधोलिखिते चित्रे दर्शितं भवति, d-1 कालस्य सूचना d+1 इत्यस्मै दातुं शक्यते, तथा च d+1 इति कालस्य सूचना दातुं शक्यते, एवं साक्षात्कारः भवति अनुवादस्य एकस्य एककस्य विशेषतानिर्माणम् ।

  • खिडकी सांख्यिकीय लक्षणम् : १. विण्डो-आँकडा भिन्न-भिन्न-विण्डो-आकारस्य निर्माणं कर्तुं शक्नोति, ततः विण्डो-परिधि-आधारित-मध्यम-, अधिकतम-, न्यूनतम-, माध्य-, तथा च विचरण-सूचनाः गणयितुं शक्नोति, यत् अत्यन्तं नवीनतम-पदे दत्तांशस्य परिवर्तनं प्रतिबिम्बयितुं शक्नोति यथा अधोलिखिते चित्रे दर्शितं, d क्षणात् पूर्वं त्रयाणां समय-एककानां सूचनां सांख्यिकीयरूपेण निर्मातुं शक्यते यत् me d क्षणं दातुं शक्यते ।

    1. # 合并训练数据和测试数据,并进行排序
    2. data = pd.concat([test, train], axis=0, ignore_index=True)
    3. data = data.sort_values(['id','dt'], ascending=False).reset_index(drop=True)
    4. # 历史平移
    5. for i in range(10,30):
    6. data[f'last{i}_target'] = data.groupby(['id'])['target'].shift(i)
    7. # 窗口统计
    8. data[f'win3_mean_target'] = (data['last10_target'] + data['last11_target'] + data['last12_target']) / 3
    9. # 进行数据切分
    10. train = data[data.target.notnull()].reset_index(drop=True)
    11. test = data[data.target.isnull()].reset_index(drop=True)
    12. # 确定输入特征
    13. train_cols = [f for f in data.columns if f not in ['id','target']]

    ४) आदर्शप्रशिक्षणं परीक्षणसमूहपूर्वसूचना च

    Lightgbm मॉडलस्य उपयोगं चयनं प्रायः आँकडाखननप्रतियोगितानां आधाररेखाप्रतिरूपरूपेण भवति यत् प्रक्रियापैरामीटरसमायोजनस्य आवश्यकतां विना अपेक्षाकृतं स्थिरं स्कोरं प्राप्तुं शक्नोति । तदतिरिक्तं ज्ञातव्यं यत् प्रशिक्षणसमूहस्य निर्माणं सत्यापनसमूहस्य च, यतः दत्तांशस्य समयश्रृङ्खलासम्बन्धः भवति, तत्कालश्रृङ्खलानुसारं सख्यं विभक्तं भवति अत्र मूलप्रशिक्षणदत्तांशसमूहः dt प्रशिक्षणरूपेण 30 भवति data, and the previous data is used as the verification data , एतेन सुनिश्चितं भवति यत् दत्तांशेषु कोऽपि पारगमनसमस्या नास्ति (भविष्यस्य दत्तांशस्य उपयोगः ऐतिहासिकदत्तांशस्य पूर्वानुमानार्थं न भवति)।

  1. def time_model(clf, train_df, test_df, cols):
  2. # 训练集和验证集切分
  3. trn_x, trn_y = train_df[train_df.dt>=31][cols], train_df[train_df.dt>=31]['target']
  4. val_x, val_y = train_df[train_df.dt<=30][cols], train_df[train_df.dt<=30]['target']
  5. # 构建模型输入数据
  6. train_matrix = clf.Dataset(trn_x, label=trn_y)
  7. valid_matrix = clf.Dataset(val_x, label=val_y)
  8. # lightgbm参数
  9. lgb_params = {
  10. 'boosting_type': 'gbdt',
  11. 'objective': 'regression',
  12. 'metric': 'mse',
  13. 'min_child_weight': 5,
  14. 'num_leaves': 2 ** 5,
  15. 'lambda_l2': 10,
  16. 'feature_fraction': 0.8,
  17. 'bagging_fraction': 0.8,
  18. 'bagging_freq': 4,
  19. 'learning_rate': 0.05,
  20. 'seed': 2024,
  21. 'nthread' : 16,
  22. 'verbose' : -1,
  23. }
  24. # 训练模型
  25. model = clf.train(lgb_params, train_matrix, 50000, valid_sets=[train_matrix, valid_matrix],
  26. categorical_feature=[], verbose_eval=500, early_stopping_rounds=500)
  27. # 验证集和测试集结果预测
  28. val_pred = model.predict(val_x, num_iteration=model.best_iteration)
  29. test_pred = model.predict(test_df[cols], num_iteration=model.best_iteration)
  30. # 离线分数评估
  31. score = mean_squared_error(val_pred, val_y)
  32. print(score)
  33. return val_pred, test_pred
  34. lgb_oof, lgb_test = time_model(lgb, train, test, train_cols)
  35. # 保存结果文件到本地
  36. test['target'] = lgb_test
  37. test[['id','dt','target']].to_csv('submit.csv', index=None)

प्राप्नोतुअंशः ।

4.उन्नत

फीचर-इञ्जिनीयरिङ्गस्य महत्त्वं स्वयमेव स्पष्टम् अस्ति

अहं कानिचन अधिकानि विशेषतानि योजितवान्, अधिकानि योजयितुं शक्नोमि स्म, परन्तु colab इत्यस्य पर्याप्तस्मृतिः नासीत् ।

कोटि-कोटि-दत्तांशः अस्ति, अधिकानि विशेषतानि योजयितुं कोऽपि उपायः नास्ति, पश्चात् कथं तस्य अनुकूलनं करणीयम् ।