Machine Learning · کاربردی

تحلیل و پیش‌بینی تأخیرهای پرواز

تأخیر ورود را پس از مشخص‌شدن تأخیر خروج و زمان پرواز تخمین بزن؛ پیش‌بینی پیش از خروج نیست.

۱۰۰ دقیقه · ۲۷۰ XP · Python · Scikit-learn · Evaluation

هدف و راهنمای انجام

جداسازی آموزش و ارزیابی و سنجش تعمیم مدل

ورودی

train: لیست سطرهای دارای arr_delay؛ test: لیست ویژگی‌های بدون هدف؛ features: ['month', 'day', 'hour', 'distance', 'air_time', 'dep_delay']؛ target: arr_delay

خروجی

result.json شامل predictions با یک مقدار به‌ازای هر سطر test؛ عدد برای رگرسیون و برچسب موجود در train برای دسته‌بندی.

  1. request.json شامل train دارای برچسب و test بدون برچسب است؛ فایل CSV محلی برای مطالعه است و در ارزیابی به محیط ارسال نمی‌شود.
  2. train را به ویژگی‌ها و target جدا کن؛ داده ارزیابی بیرونی را هرگز برای fit استفاده نکن.
  3. برای تمرین، با train_test_split و random_state=42 بخشی از train را نگه دار و مدل را با MAE یا accuracy/F1 بسنج.
  4. مدل یا Pipeline را فقط روی داده آموزش fit کن؛ سپس برای تمام سطرهای test پیش‌بینی کن.
  5. predictions را به ترتیب test در result.json ذخیره کن؛ امتیاز نهایی را داور روی برچسب‌های خارج محیط محاسبه می‌کند.

تقسیم داده را داور هم مستقل انجام می‌دهد؛ موفقیت صرف اجرای برنامه یا metric چاپ‌شده کافی نیست. random_state=42 را برای بازتولیدپذیری تنظیم کن.

مثال ورودی و خروجی

{
    "input": {
        "train": [
            {
                "month": 1,
                "day": 2,
                "hour": 18,
                "distance": 760,
                "air_time": 127,
                "dep_delay": -1,
                "arr_delay": -16
            },
            {
                "month": 1,
                "day": 1,
                "hour": 16,
                "distance": 199,
                "air_time": 48,
                "dep_delay": 14,
                "arr_delay": 13
            },
            {
                "month": 1,
                "day": 3,
                "hour": 8,
                "distance": 1069,
                "air_time": 165,
                "dep_delay": -1,
                "arr_delay": -4
            },
            {
                "month": 1,
                "day": 3,
                "hour": 8,
                "distance": 1005,
                "air_time": 165,
                "dep_delay": 2,
                "arr_delay": 2
            },
            {
                "month": 1,
                "day": 2,
                "hour": 16,
                "distance": 762,
                "air_time": 130,
                "dep_delay": -2,
                "arr_delay": 26
            },
            {
                "month": 1,
                "day": 2,
                "hour": 18,
                "distance": 419,
                "air_time": 74,
                "dep_delay": -9,
                "arr_delay": -15
            },
            {
                "month": 1,
                "day": 2,
                "hour": 19,
                "distance": 2586,
                "air_time": 320,
                "dep_delay": 17,
                "arr_delay": -33
            },
            {
                "month": 1,
                "day": 2,
                "hour": 6,
                "distance": 719,
                "air_time": 112,
                "dep_delay": 80,
                "arr_delay": 90
            },
            {
                "month": 1,
                "day": 2,
                "hour": 18,
                "distance": 719,
                "air_time": 137,
                "dep_delay": 15,
                "arr_delay": 19
            },
            {
                "month": 1,
                "day": 2,
                "hour": 7,
                "distance": 1400,
                "air_time": 215,
                "dep_delay": 7,
                "arr_delay": 13
            },
            {
                "month": 1,
                "day": 2,
                "hour": 15,
                "distance": 642,
                "air_time": 121,
                "dep_delay": 43,
                "arr_delay": 47
            },
            {
                "month": 1,
                "day": 2,
                "hour": 21,
                "distance": 301,
                "air_time": 63,
                "dep_delay": -4,
                "arr_delay": -10
            },
            {
                "month": 1,
                "day": 1,
                "hour": 17,
                "distance": 1416,
                "air_time": 234,
                "dep_delay": 2,
                "arr_delay": 16
            },
            {
                "month": 1,
                "day": 1,
                "hour": 17,
                "distance": 2402,
                "air_time": 344,
                "dep_delay": 1,
                "arr_delay": -19
            },
            {
                "month": 1,
                "day": 2,
                "hour": 6,
                "distance": 1085,
                "air_time": 157,
                "dep_delay": -1,
                "arr_delay": -1
            },
            {
                "month": 1,
                "day": 2,
                "hour": 12,
                "distance": 719,
                "air_time": 136,
                "dep_delay": -1,
                "arr_delay": -1
            },
            {
                "month": 1,
                "day": 2,
                "hour": 18,
                "distance": 2422,
                "air_time": 325,
                "dep_delay": -5,
                "arr_delay": -51
            },
            {
                "month": 1,
                "day": 2,
                "hour": 16,
                "distance": 1626,
                "air_time": 242,
                "dep_delay": -1,
                "arr_delay": -18
            },
            {
                "month": 1,
                "day": 2,
                "hour": 12,
                "distance": 1183,
                "air_time": 196,
                "dep_delay": -2,
                "arr_delay": 1
            },
            {
                "month": 1,
                "day": 2,
                "hour": 15,
                "distance": 2475,
                "air_time": 341,
                "dep_delay": -5,
                "arr_delay": -23
            },
            {
                "month": 1,
                "day": 2,
                "hour": 9,
                "distance": 266,
                "air_time": 51,
                "dep_delay": -6,
                "arr_delay": -1
            },
            {
                "month": 1,
                "day": 1,
                "hour": 15,
                "distance": 282,
                "air_time": 58,
                "dep_delay": 16,
                "arr_delay": 12
            },
            {
                "month": 1,
                "day": 2,
                "hour": 8,
                "distance": 1020,
                "air_time": 142,
                "dep_delay": 10,
                "arr_delay": -6
            },
            {
                "month": 1,
                "day": 2,
                "hour": 6,
                "distance": 1028,
                "air_time": 146,
                "dep_delay": -6,
                "arr_delay": -10
            },
            {
                "month": 1,
                "day": 2,
                "hour": 18,
                "distance": 1598,
                "air_time": 191,
                "dep_delay": -3,
                "arr_delay": -4
            },
            {
                "month": 1,
                "day": 1,
                "hour": 18,
                "distance": 2422,
                "air_time": 334,
                "dep_delay": -4,
                "arr_delay": -13
            },
            {
                "month": 1,
                "day": 2,
                "hour": 17,
                "distance": 544,
                "air_time": 100,
                "dep_delay": -4,
                "arr_delay": -6
            },
            {
                "month": 1,
                "day": 1,
                "hour": 13,
                "distance": 445,
                "air_time": 86,
                "dep_delay": 40,
                "arr_delay": 46
            },
            {
                "month": 1,
                "day": 2,
                "hour": 7,
                "distance": 733,
                "air_time": 127,
                "dep_delay": 12,
                "arr_delay": 12
            },
            {
                "month": 1,
                "day": 1,
                "hour": 11,
                "distance": 1620,
                "air_time": 256,
                "dep_delay": 13,
                "arr_delay": 34
            },
            {
                "month": 1,
                "day": 1,
                "hour": 13,
                "distance": 569,
                "air_time": 129,
                "dep_delay": 35,
                "arr_delay": 65
            },
            {
                "month": 1,
                "day": 2,
                "hour": 20,
                "distance": 404,
                "air_time": 74,
                "dep_delay": 3,
                "arr_delay": -11
            },
            {
                "month": 1,
                "day": 2,
                "hour": 15,
                "distance": 282,
                "air_time": 51,
                "dep_delay": 128,
                "arr_delay": 141
            },
            {
                "month": 1,
                "day": 2,
                "hour": 7,
                "distance": 445,
                "air_time": 94,
                "dep_delay": -2,
                "arr_delay": 12
            },
            {
                "month": 1,
                "day": 2,
                "hour": 20,
                "distance": 762,
                "air_time": 125,
                "dep_delay": -4,
                "arr_delay": 6
            },
            {
                "month": 1,
                "day": 2,
                "hour": 17,
                "distance": 2446,
                "air_time": 319,
                "dep_delay": -6,
                "arr_delay": -44
            },
            {
                "month": 1,
                "day": 1,
                "hour": 14,
                "distance": 1504,
                "air_time": 252,
                "dep_delay": 1,
                "arr_delay": 17
            },
            {
                "month": 1,
                "day": 2,
                "hour": 7,
                "distance": 2422,
                "air_time": 309,
                "dep_delay": -1,
                "arr_delay": -45
            },
            {
                "month": 1,
                "day": 2,
                "hour": 9,
                "distance": 1023,
                "air_time": 154,
                "dep_delay": 0,
                "arr_delay": 15
            },
            {
                "month": 1,
                "day": 2,
                "hour": 8,
                "distance": 1605,
                "air_time": 242,
                "dep_delay": 1,
                "arr_delay": -11
            }
        ],
        "test": [
            {
                "month": 1,
                "day": 1,
                "hour": 10,
                "distance": 762,
                "air_time": 129,
                "dep_delay": -4
            },
            {
                "month": 1,
                "day": 2,
                "hour": 16,
                "distance": 533,
                "air_time": 102,
                "dep_delay": 168
            },
            {
                "month": 1,
                "day": 1,
                "hour": 15,
                "distance": 483,
                "air_time": 98,
                "dep_delay": -8
            }
        ],
        "features": [
            "month",
            "day",
            "hour",
            "distance",
            "air_time",
            "dep_delay"
        ],
        "target": "arr_delay"
    },
    "output": {
        "predictions": [
            "برچسب یا عدد برای هر سطر test"
        ]
    }
}

معیارهای موفقیت

  • MAE حداکثر 15.0
  • شکل و تعداد و نوع پیش‌بینی‌ها مطابق ورودی
  • ارزیابی روی دو تقسیم تصادفی مستقل؛ برچسب test به کد ارسال نمی‌شود.

کتابخانه‌ها: pandas, scikit-learn, numpy

منبع و وضعیت دیتاست‌ها

flights.csv · CC0 1.0 · nycflights13 (Hadley Wickham), 2013 NYC departures, US Bureau of Transportation Statistics; first 2000 complete rows via Rdatasets. https://cran.r-project.org/web/packages/nycflights13/index.html

https://vincentarelbundock.github.io/Rdatasets/csv/nycflights13/flights.csv

نسخه محلی همراه پروژه؛ ۲۰۰۰ ردیف. هنگام اجرا دانلود خارجی لازم نیست.

برای نوشتن و اجرای کد وارد شوید