Κοινή χρήση τεχνολογίας

Datawhale 2024 AI Summer Camp Second Phase - Power Demand Forecasting Challenge

2024-07-12

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

#AIsummercamp#Datawhale #summercamp

1. Εισαγωγή στον διαγωνισμό

Με την ταχεία ανάπτυξη της παγκόσμιας οικονομίας και την επιτάχυνση της αστικοποίησης, το σύστημα ηλεκτρικής ενέργειας αντιμετωπίζει αυξανόμενες προκλήσεις. Η ακριβής πρόβλεψη της ζήτησης ηλεκτρικής ενέργειας είναι ζωτικής σημασίας για τη σταθερή λειτουργία του δικτύου ηλεκτρικής ενέργειας, την αποτελεσματική διαχείριση ενέργειας και την ενσωμάτωση των ανανεώσιμων πηγών ενέργειας.

2. Εργασίες εκδήλωσης

Λαμβάνοντας υπόψη τα σχετικά δεδομένα ακολουθίας και άλλες πληροφορίες των Ν ημερών ιστορικού κατανάλωσης ηλεκτρικής ενέργειας που αντιστοιχούν σε πολλαπλά σπίτια, προβλέψτε την κατανάλωση ηλεκτρικής ενέργειας που αντιστοιχεί στα σπίτια.

2024 iFLYTEK AI Developer Competition-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 είναι το αναγνωριστικό του σπιτιού, το dt είναι το αναγνωριστικό ημέρας, τα ελάχιστα δεδομένα εκπαίδευσης dt είναι 11 και τα διαφορετικά μήκη ακολουθίας είναι γενικά, υπάρχει μια σχετικά μεγάλη διαφορά στο συνολικό Η κατανάλωση διαφορετικών τύπων σπιτιών είναι η πραγματική κατανάλωση ενέργειας, η οποία είναι και ο στόχος πρόβλεψής μας για αυτόν τον ανταγωνισμό. Ακολουθεί μια απλή οπτική ανάλυση που θα μας βοηθήσει να κατανοήσουμε απλά τα δεδομένα.

  • Ιστόγραμμα στόχων που αντιστοιχούν σε διαφορετικούς τύπους

  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()

  • Το γράφημα γραμμών του στόχου με αναγνωριστικό ως 00037f39cf ως ακολουθία σύμφωνα με dt

  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 και οι πληροφορίες του χρόνου d μπορούν να δοθούν στον χρόνο d+1, συνειδητοποιώντας έτσι. η κατασκευή χαρακτηριστικών μιας μονάδας μετάφρασης.

  • Στατιστικά χαρακτηριστικά παραθύρου: Τα στατιστικά παραθύρων μπορούν να δημιουργήσουν διαφορετικά μεγέθη παραθύρων και στη συνέχεια να υπολογίσουν τις πληροφορίες μέσης, μέγιστης, ελάχιστης, διάμεσης και διακύμανσης με βάση το εύρος παραθύρου, που μπορεί να αντικατοπτρίζει τις αλλαγές στα δεδομένα στο πιο πρόσφατο στάδιο. Όπως φαίνεται στο παρακάτω σχήμα, οι πληροφορίες των τριών χρονικών μονάδων πριν από τη d στιγμή μπορούν να κατασκευαστούν στατιστικά για να μου δώσουν 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']]

    4) Μοντέλο εκπαίδευσης και πρόβλεψη συνόλου δοκιμών

    Η επιλογή χρήσης του μοντέλου Lightgbm χρησιμοποιείται συνήθως ως βασικό μοντέλο σε διαγωνισμούς εξόρυξης δεδομένων. Επιπλέον, πρέπει να σημειωθεί ότι η κατασκευή του συνόλου εκπαίδευσης και του συνόλου επαλήθευσης, επειδή τα δεδομένα έχουν σχέση χρονοσειράς, διαιρούνται αυστηρά σύμφωνα με τις χρονοσειρές Εδώ, το αρχικό σύνολο δεδομένων εκπαίδευσης είναι 30 ως εκπαίδευση δεδομένα και τα προηγούμενα δεδομένα χρησιμοποιούνται ως δεδομένα επαλήθευσης , αυτό διασφαλίζει ότι δεν υπάρχει πρόβλημα διασταύρωσης στα δεδομένα (τα μελλοντικά δεδομένα δεν χρησιμοποιούνται για την πρόβλεψη ιστορικών δεδομένων).

  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 δεν είχε αρκετή μνήμη.

Υπάρχουν εκατομμύρια δεδομένα και δεν υπάρχει τρόπος να προσθέσετε περισσότερες δυνατότητες. Ας δούμε πώς να τα βελτιστοποιήσετε αργότερα.