Lagیعنی مقدارِ عقبافتاده و rollingویژگیِ خلاصهٔ یک پنجره است؛ اما نامِ این دو، گذشتهبودنِ اطلاعات را تضمین نمیکند. اگر قبل از رسیدنِ مقدارِ زمانtتصمیم میگیریم، ویژگی نباید خودِy_tرا داشته باشد. این صفحه یک سازندهٔ واقعیِ ویژگی با زمانِ دسترسی و آزمونِ تغییرِ آینده دارد؛ مدلی آموزش نمیدهد.
قبل از ساخت ویژگی، زمانِ تصمیم را بنویسیم
هشت مشاهدهٔ اصیلِ ساعتی با مقدارهای۱۰،۱۲،۱۴،۱۳،۱۶،۱۸،۱۷و۲۰داریم. شروع،۱نوامبر۲۰۲۶ساعت۰۰:۰۰UTCاست. هر مشاهده ده دقیقه پس از زمان رخداد در دسترس قرار میگیرد. برای هدفِ هر ردیف، زمانِ تصمیم خودِ ساعتِ رخداد است؛ بنابراین مقدارِ همان ردیف هنوز حاضر نیست. این زمانبندی فرضِ آموزشی است، نه لاگِ واقعیِ سایت یا مشتری.
ستون event_timeباavailable_atیکسان نیست. حتی مشاهدهٔ مربوط به ساعتِ قبلی، اگر دیر رسیده باشد، ممکن است در زمانِ تصمیم قابل استفاده نباشد. فایل هر دو را دارد و پیش از برداشتنِ مقدارِ قبلی، available_at≤decision_timeرا کنترل میکند.
سه ویژگی با مرزِ روشن
lag1مقدارِ یک ردیفِ قبل، lag2مقدارِ دو ردیفِ قبل و rolling3میانگینِ دقیقاً سه ردیفِ پیشین است؛ خودِ هدفِ جاری داخلِ هیچکدام نیست. این کد فقط روی شبکهٔ منظمِ یکساعته کار میکند، پس در این قرارداد یک ردیف قبل همان یک ساعت قبل است. دادهٔ نامنظم را به همین معنی قبول نمیکند.
| زمان تصمیمUTC | lag1 | lag2 | میانگین سه مقدارِ پیشین |
|---|---|---|---|
| ۰۰:۰۰ | نداریم | نداریم | نداریم |
| ۰۲:۰۰ | ۱۲ | ۱۰ | هنوز سه مقدار نداریم |
| ۰۳:۰۰ | ۱۴ | ۱۲ | (۱۰+۱۲+۱۴)÷۳=۱۲ |
خانهٔ خالیِ CSVوNoneدر Pythonبه معنی نبودِ ویژگی است؛ صفرِ واقعی نیست. در CSVمقدارِ هدف هم فقط با نام target_value_audit_onlyبرای بررسی آمده و نباید جزو ورودی مدل انتخاب شود. تابعِ سازنده در خروجیِ ویژگی آن ستون را برنمیگرداند.
آزمونِ تغییرِ آینده را اجرا کنیم
برای هر یک از هشت مرزِ تصمیم، کد همهٔ مقدارهای آن زمان و بعد از آن را دههزار واحد زیاد میکند. ویژگیهای تا همان مرز باید دقیقاً برابر بمانند، چون قرار نیست آن مقدارها را دیده باشند. این هشت آزمون واقعاً اجرا شدهاند؛ فقط توصیهٔ نظریِ «آینده را استفاده نکن» نیست.
در کنترلِ جدا، دسترسی به مشاهدهٔ ساعت۰۲را تا بعد از ساعت۰۴عقب میاندازیم. در تصمیم۰۳،lag1وrolling3حالاNoneمیشوند. حذفِ خودِy_tکافی نبود؛ تأخیرِ دادهٔ پیشین هم اهمیت داشت. کد، تأخیر را با جایگزینکردنِ بیخبرِ مقدارِ کهنه پنهان نمیکند.
مرتبسازی و ورودیِ نامعتبر
ورودی ابتدا با زمان مرتب میشود و برعکسبودنِ ترتیبِ فایل، نتیجه را عوض نمیکند. زمانِ تکراری، فاصلهٔ غیرِیکساعته، تاریخِ بدونUTCصریح و مقدارِ غیرمتناهی در چهار آزمون رد شدهاند. در قراردادِ همین مشاهدهها، زمانِ دسترسیِ قبل از رخداد نیز نامعتبر است. پرکردنِ شکاف، تجمیعِ منطقهٔ زمانی و اصلاحِ تاریخیِ داده بیرون از این نسخهاند.
در ابزارهایی مانند pandas، تعدادِ ردیفِ پنجره، بازهٔ زمانی، min_periodsوshiftقراردادهای متفاوت دارند؛ کد حاضر pandasرا اجرا نمیکند. میانگینِ شاملِ هدفِ جاری را بهجای میانگینِ سه ردیفِ قبلی استفاده نکنید. داشتنِ خروجیِ سالم در این تمرین هم نبودِ تمامِ نشتها را برای یک سامانهٔ دیگر ثابت نمیکند.
کاربرد بعدیِ این جدول
این سازنده برای ویژگیهای یکگامِ تاریخی با مقدارهایِ واقعاً رسیده است. اگر بخواهید چند ساعتِ آینده را یکجا پیشبینی کنید، مقدارِ واقعیِ گامِ پیشبینیشده هنوز در دسترس نیست؛ واردکردنِ آن به lagگامِ بعد، قرارداد را عوض میکند و در این کد پیاده نشده است. راهنمای ممیزی نشت زمانی دامنهٔ بررسیِ گستردهتر را دارد؛ تفکیک روند و فصل هم خروجیِ گذشتهنگرِ دیگری است. ادامه در مبانی هوش مصنوعی؛ نتیجهٔ پیشبینی یا خدمتِ آمادهٔ اپرا از این تمرین استنباط نمیشود.
فایل تمرین و منبع
ساختِ lagوپنجرهٔ گذشته با آزمونِ تغییرِ تمام آینده · زمانِ رخداد، زمانِ دسترسی و ویژگیها؛ هدف فقط ستونِ ممیزی است
منابع در ۳ نوامبر ۲۰۲۶ خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.