فصل ۸: GLM، GAM و بیشتر

عنوان اصلی: GLM, GAM and more
منبع: https://christophm.github.io/interpretable-ml-book/extend-lm.html
نویسنده: Christoph Molnar
مترجم: مریم محمودی


بزرگ‌ترین نقطه قوت، اما در عین حال بزرگ‌ترین نقطه ضعف مدل رگرسیون خطی، این است که پیش‌بینی به‌صورت مجموع وزن‌دار ویژگی‌ها مدل‌سازی می‌شود. علاوه بر این، مدل خطی مفروضات دیگر زیادی هم دارد. خبر بد (که راستش خبر جدیدی هم نیست) این است که همه این مفروضات در واقعیت اغلب نقض می‌شوند: توزیع خروجی با توجه به ویژگی‌ها ممکن است غیرگاوسی باشد، ویژگی‌ها ممکن است با هم تعامل داشته باشند، و رابطه بین ویژگی‌ها و خروجی ممکن است غیرخطی باشد. خبر خوب این است که جامعه آمار انواع و اقسام تعدیل‌هایی را توسعه داده که مدل رگرسیون خطی را از یک تیغ ساده به یک چاقوی چندکاره سوئیسی تبدیل می‌کند.

این فصل قطعاً راهنمای قطعی شما برای گسترش مدل‌های خطی نیست. در عوض، مروری بر گسترش‌هایی مانند مدل‌های خطی تعمیم‌یافته (GLM) و مدل‌های جمعی تعمیم‌یافته (GAM) ارائه می‌دهد و کمی شهود به شما می‌دهد. پس از خواندن این فصل، باید یک مرور کلی محکم از چگونگی گسترش مدل‌های خطی داشته باشید. اگر می‌خواهید ابتدا بیشتر درباره مدل رگرسیون خطی بدانید، پیشنهاد می‌کنم — در صورتی که تاکنون نخوانده‌اید — فصل مربوط به مدل رگرسیون خطی را بخوانید.

بیایید فرمول مدل رگرسیون خطی را به یاد بیاوریم:

$$\hat{f}(\mathbf{x}) = \beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p + \epsilon$$

مدل رگرسیون خطی فرض می‌کند پیش‌بینی یک نمونه را می‌توان با مجموع وزن‌دار $p$ ویژگی آن، به‌همراه یک متغیر تصادفی $\epsilon^{(i)}$ که از توزیع گاوسی پیروی می‌کند، بیان کرد. با فشردن داده‌ها درون این قالب سفت‌وسخت فرمول، تفسیرپذیری زیادی از مدل به‌دست می‌آوریم. اثرات ویژگی‌ها جمعی هستند — یعنی هیچ تعاملی وجود ندارد — و رابطه خطی است، و همین به ما اجازه می‌دهد رابطه بین یک ویژگی و خروجی مورد انتظار را در یک عدد واحد، یعنی وزن برآوردشده، فشرده کنیم.

اما یک مجموع وزن‌دار ساده برای بسیاری از مسائل پیش‌بینی دنیای واقعی بیش از حد محدودکننده است. در این فصل با سه مشکل مدل رگرسیون خطی کلاسیک و راه‌حل آن‌ها آشنا می‌شویم. مشکلات دیگری هم وجود دارند که ممکن است مفروضات را نقض کنند، اما ما روی سه موردی که در شکل ۸.۱ نشان داده شده‌اند تمرکز می‌کنیم.

شکل ۸.۱

شکل ۸.۱: سه فرض مدل خطی (سمت چپ): توزیع گاوسی خروجی با توجه به ویژگی‌ها، جمع‌پذیری (یعنی بدون تعامل) و رابطه خطی. واقعیت معمولاً پایبند این مفروضات نیست (سمت راست): خروجی‌ها ممکن است توزیع غیرگاوسی داشته باشند، ویژگی‌ها ممکن است با هم تعامل داشته باشند، و رابطه ممکن است غیرخطی باشد.


مشکل: خروجی هدف $y$ با توجه به ویژگی‌ها، توزیع گاوسی ندارد.

مثال: فرض کنید می‌خواهم پیش‌بینی کنم هر روز چند دقیقه دوچرخه‌سواری می‌کنم. به‌عنوان ویژگی، نوع روز، وضعیت آب‌وهوا و مواردی از این دست را دارم. اگر از یک مدل خطی استفاده کنم، ممکن است دقایق منفی پیش‌بینی کند، چون این مدل توزیع گاوسی را فرض می‌کند که در صفر دقیقه متوقف نمی‌شود. همچنین اگر بخواهم با یک مدل خطی احتمال پیش‌بینی کنم، ممکن است احتمال‌هایی منفی یا بزرگ‌تر از ۱ به‌دست بیاورم.

راه‌حل: مدل‌های خطی تعمیم‌یافته (GLM).


مشکل: ویژگی‌ها با یکدیگر تعامل دارند.

مثال: به‌طور میانگین، باران ملایم تأثیر منفی جزئی بر تمایل من به دوچرخه‌سواری دارد. اما در تابستان، در ساعات شلوغی، از باران استقبال می‌کنم، چون باعث می‌شود همه دوچرخه‌سواران هواخوش‌دوست خانه بمانند و مسیرهای دوچرخه‌سواری برای خودم خلوت شود! این یک تعامل بین زمان و آب‌وهواست که یک مدل کاملاً جمعی نمی‌تواند آن را نشان دهد.

راه‌حل: افزودن جملات تعاملی.


مشکل: رابطه واقعی بین ویژگی‌ها و $y$ خطی نیست.

مثال: بین ۰ تا ۲۵ درجه سانتی‌گراد، تأثیر دما بر تمایل من به دوچرخه‌سواری می‌تواند خطی باشد، یعنی افزایش از ۰ به ۱ درجه همان اندازه‌ای که تمایل به دوچرخه‌سواری را زیاد می‌کند که افزایش از ۲۰ به ۲۱ درجه. اما در دماهای بالاتر، انگیزه من برای دوچرخه‌سواری کم‌کم فروکش می‌کند و حتی کاهش می‌یابد — وقتی هوا خیلی گرم است، دوست ندارم دوچرخه‌سواری کنم.

راه‌حل‌ها: مدل‌های جمعی تعمیم‌یافته (GAM)؛ تبدیل ویژگی‌ها.

بررسی نقض مفروضات مدل خطی

می‌توانید این مشکلات، از جمله تعامل ویژگی‌ها، را به‌صورت تجربی با مقایسه راه‌حل‌ها با رگرسیون خطی ساده بررسی کنید: آیا مدل خطی شما روی داده‌های اعتبارسنجی، وقتی از یک جمله تعاملی استفاده می‌شود، عملکرد بهتری دارد؟

راه‌حل‌های این سه مشکل در این فصل ارائه می‌شوند. بسیاری از گسترش‌های دیگر مدل خطی در اینجا نادیده گرفته شده‌اند. اگر می‌خواستم همه‌چیز را اینجا پوشش دهم، این فصل به‌سرعت به یک کتاب درون کتاب درباره موضوعی تبدیل می‌شد که پیش از این هم در کتاب‌های زیادی پوشش داده شده است. اما حالا که تا اینجا آمده‌اید، در پایان فصل یک مرور کوتاه از مشکل به‌همراه راه‌حل برای گسترش‌های مدل خطی آماده کرده‌ام که می‌توانید آن را در انتهای فصل بیابید.

خروجی‌های غیرگاوسی — GLM ها

مدل رگرسیون خطی فرض می‌کند خروجی با توجه به ویژگی‌های ورودی از توزیع گاوسی پیروی می‌کند. این فرض بسیاری از حالت‌های واقعی را کنار می‌گذارد: خروجی می‌تواند یک دسته باشد (سرطانی در برابر سالم)، یک شمارش (تعداد فرزندان)، زمان تا وقوع رویداد (زمان خرابی یک ماشین)، یا توزیعی با چولگی شدید (درآمد خانوار). مدل‌های خطی تعمیم‌یافته (GLMs) این محدودیت را برطرف می‌کنند.

ایده اصلی GLM این است: مجموع وزن‌دار ویژگی‌ها را نگه داریم، اما اجازه دهیم توزیع خروجی غیرگاوسی باشد و میانگین مورد انتظار این توزیع را از طریق یک تابع پیوند (link function) به مجموع وزن‌دار متصل کنیم.

فرمول GLM

GLM رابطه زیر را مدل می‌کند:

$$g\!\left(\mathbb{E}[Y \mid \mathbf{x}]\right) = \beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p = \mathbf{x}^T \boldsymbol{\beta}$$

که در آن $g$ تابع پیوند است. هر GLM از سه مؤلفه تشکیل شده:

  1. تابع پیوند $g$: میانگین توزیع را به پیش‌بینی خطی متصل می‌کند.
  2. پیش‌بینی خطی $\mathbf{x}^T\boldsymbol{\beta}$: همان مجموع وزن‌دار ویژگی‌هاست.
  3. توزیع احتمال از خانواده نمایی (exponential family): توزیع خروجی را مشخص می‌کند.

خانواده نمایی مجموعه‌ای از توزیع‌هاست که با یک فرمول پارامتری مشترک شامل یک عبارت نمایی، میانگین و واریانس توزیع، و چند پارامتر دیگر نوشته می‌شوند و شامل گاوسی، برنولی، پواسون، نمایی، گاما و بسیاری دیگر می‌شود. ویکی‌پدیا فهرست خوبی از توزیع‌های خانواده نمایی دارد و هر یک از آن‌ها را می‌توان برای GLM انتخاب کرد. بر اساس نوع خروجی، توزیع مناسب انتخاب می‌شود: اگر خروجی شمارش چیزی باشد (مثلاً تعداد فرزندان ساکن در یک خانه)، توزیع پواسون گزینه خوبی است؛ اگر خروجی همیشه مثبت باشد (مثلاً فاصله زمانی بین دو رویداد)، توزیع نمایی می‌تواند مناسب باشد.

مدل خطی کلاسیک حالت خاصی از GLM است که توزیع گاوسی و تابع پیوند همانی (identity) دارد — یعنی $g(x) = x$. توزیع گاوسی با دو پارامتر میانگین و واریانس مشخص می‌شود: میانگین مقداری است که به‌طور متوسط انتظار داریم، و واریانس نشان می‌دهد مقادیر چقدر حول این میانگین پراکنده‌اند. در مدل خطی، تابع پیوند، مجموع وزن‌دار ویژگی‌ها را به میانگین توزیع گاوسی متصل می‌کند. در چارچوب GLM، این ایده به هر توزیعی از خانواده نمایی و هر تابع پیوندی تعمیم می‌یابد.

رگرسیون لجستیک به‌عنوان GLM

رگرسیون لجستیک نیز یک GLM است: توزیع برنولی و تابع پیوند لاجیت (logit). رابطه آن:

$$\mathbf{x}^T\boldsymbol{\beta} = \ln\!\left(\frac{\mathbb{P}(Y=1\mid\mathbf{x})}{1-\mathbb{P}(Y=1\mid\mathbf{x})}\right)$$

که با معکوس‌گرفتن به فرمول آشنای رگرسیون لجستیک می‌رسیم:

$$\mathbb{P}(Y=1) = \frac{1}{1+\exp(-\mathbf{x}^T\boldsymbol{\beta})}$$

GLM پواسون برای داده‌های شمارشی

اگر خروجی یک شمارش باشد (عدد صحیح غیرمنفی)، توزیع پواسون و لگاریتم طبیعی به‌عنوان تابع پیوند انتخاب مناسبی هستند:

$$\ln\!\left(\mathbb{E}[Y\mid\mathbf{x}]\right) = \mathbf{x}^T\boldsymbol{\beta}$$

هر توزیع خانواده نمایی یک تابع پیوند «متعارف» (canonical link function) دارد که می‌توان آن را به‌طور ریاضی از خود توزیع استخراج کرد. چارچوب GLM این امکان را می‌دهد که تابع پیوند را مستقل از توزیع انتخاب کنید. اما چگونه تابع پیوند درست را انتخاب کنیم؟ دستور پخت کاملی وجود ندارد؛ باید هم دانش خود درباره توزیع متغیر هدف، هم ملاحظات نظری، و هم میزان برازش مدل به داده‌های واقعی را در نظر بگیرید. برای برخی توزیع‌ها، تابع پیوند متعارف می‌تواند به مقادیری منجر شود که برای آن توزیع نامعتبرند. برای نمونه، تابع پیوند متعارف توزیع نمایی، معکوس منفی (negative inverse) است که می‌تواند به پیش‌بینی‌های منفی خارج از دامنه توزیع نمایی بینجامد. از آنجا که می‌توانید هر تابع پیوندی را انتخاب کنید، راه‌حل ساده این است که تابعی دیگر برگزینید که دامنه توزیع را رعایت کند.

توضیح مترجم: منظور از تابع پیوند «متعارف» این است که اگر فرمول ریاضی توزیع منتخب را باز کنیم، یک تابع پیوند به‌طور طبیعی از دل آن بیرون می‌آید (مثلاً تابع لاجیت برای برنولی، یا لگاریتم برای پواسون). اما هیچ الزامی به استفاده از همین تابع «طبیعی» نیست؛ در GLM می‌توان تابع پیوند دیگری انتخاب کرد، به شرط آنکه پیش‌بینی‌ها همچنان در بازه معتبر برای آن توزیع باقی بمانند.

مثال: پیش‌بینی مصرف قهوه

فرض کنید داده‌ای از رفتار روزانه نوشیدن قهوه جمع‌آوری شده است (اگر قهوه دوست ندارید، تصور کنید ماجرا درباره چای یا چیز دیگری است). ویژگی‌ها عبارتند از: سطح استرس (۱ تا ۱۰)، کیفیت خواب شب قبل (۱ تا ۱۰)، و اینکه آیا آن روز روز کاری بوده یا نه. هدف پیش‌بینی تعداد فنجان‌های قهوه است. داده برای ۲۰۰ روز شبیه‌سازی شده: استرس و خواب به‌طور یکنواخت بین ۱ و ۱۰، و روز کاری با احتمال ۵۰-۵۰ تولید شده‌اند. برای هر روز، تعداد فنجان‌های قهوه از یک توزیع پواسون کشیده شده که پارامتر شدت آن ($\lambda$، که برابر با مقدار مورد انتظار توزیع پواسون نیز هست) تابعی از ویژگی‌های خواب، استرس و روز کاری است.

شکل ۸.۲

شکل ۸.۲: توزیع تعداد فنجان‌های قهوه در ۲۰۰ روز. در ۸۴ روز از ۲۰۰ روز اصلاً قهوه نخورده و در پرمصرف‌ترین روز، ۱۰ فنجان قهوه نوشیده شده است.

حال بیایید ساده‌لوحانه از یک مدل خطی برای پیش‌بینی تعداد فنجان‌های قهوه بر اساس سطح خواب، سطح استرس و روز کاری استفاده کنیم. اگر به‌اشتباه توزیع گاوسی را فرض کنیم چه اتفاقی می‌افتد؟ فرض نادرست می‌تواند برآوردها، به‌ویژه بازه‌های اطمینان وزن‌ها را نامعتبر کند. مشکل آشکارتر این است که پیش‌بینی‌ها با دامنه «مجاز» خروجی واقعی همخوانی ندارند، همان‌طور که شکل زیر نشان می‌دهد؛ مدل خطی منطقی نیست چون تعداد منفی فنجان قهوه پیش‌بینی می‌کند. همچنین ممکن است عملکرد مدل روی داده آزمون هم به‌سادگی ضعیف باشد.

شکل ۸.۳

شکل ۸.۳: رگرسیون خطی برای پیش‌بینی تعداد فنجان‌های قهوه: مدل پیش‌بینی‌های منفی تولید می‌کند که غیرممکن است.

مشکل ناسازگاری توزیع‌ها را می‌توان با مدل‌های خطی تعمیم‌یافته (GLM) حل کرد؛ می‌توانیم تابع پیوند و توزیع مفروض را تغییر دهیم. یک راه این است که توزیع گاوسی را نگه داریم اما به‌جای تابع همانی از تابع پیوندی استفاده کنیم که همیشه به پیش‌بینی‌های مثبت می‌انجامد، مانند پیوند-لگاریتمی (که معکوس آن تابع نمایی است). راه بهتر این است که توزیعی متناسب با فرایند تولید داده و تابع پیوند مناسب آن را انتخاب کنیم. از آنجا که خروجی یک شمارش است، توزیع پواسون همراه با لگاریتم به‌عنوان تابع پیوند، انتخابی طبیعی است. در این مثال، داده اصلاً با توزیع پواسون تولید شده، پس GLM پواسون انتخابی کاملاً بی‌نقص است.

شکل ۸.۴

شکل ۸.۴: GLM پواسون برای پیش‌بینی تعداد فنجان‌های قهوه: تمام پیش‌بینی‌ها غیرمنفی هستند. دیگر هیچ مقدار منفی از قهوه دیده نمی‌شود؛ نتیجه بسیار بهتر به نظر می‌رسد.

تفسیر وزن‌های GLM

در GLM پواسون با تابع پیوند لگاریتمی، رابطه زیر برقرار است:

$$\ln\!\left(\mathbb{E}[\text{coffee}\mid\text{str, slp, wrk}]\right) = \beta_0 + \beta_\text{str} x_\text{str} + \beta_\text{slp} x_\text{slp} + \beta_\text{wrk} x_\text{wrk}$$

با معکوس‌گرفتن تابع پیوند (exp):

$$\mathbb{E}[\text{coffee}\mid\text{str, slp, wrk}] = \exp\!\left(\beta_0 + \beta_\text{str} x_\text{str} + \beta_\text{slp} x_\text{slp} + \beta_\text{wrk} x_\text{wrk}\right)$$

چون همه وزن‌ها درون تابع نمایی هستند، تفسیر ضربی است، نه جمعی: $\exp(a+b) = \exp(a) \cdot \exp(b)$.

جدول ۸.۱: وزن‌های برآوردشده و $\exp(\text{وزن})$ برای GLM پواسون داده‌های قهوه.

ویژگیوزن ($\beta$)$\exp(\beta)$ [بازه اطمینان ۹۵٪]
عرض از مبدأ0.031.03 [0.65، 1.59]
استرس (stress)0.111.12 [1.06، 1.18]
خواب (sleep)-0.230.80 [0.76، 0.84]
روز کاری (workYES)0.982.66 [2.03، 3.53]

تفسیر: افزایش یک واحد استرس، تعداد انتظاری فنجان‌های قهوه را در عامل ۱.۱۲ ضرب می‌کند. افزایش یک واحد کیفیت خواب، آن را در ۰.۸۰ ضرب می‌کند. در روز کاری نسبت به روز تعطیل، به طور میانگین ۲.۶۶ برابر قهوه بیشتر نوشیده می‌شود. خلاصه اینکه هرچه استرس بیشتر، خواب کمتر و کار بیشتر باشد، قهوه بیشتری مصرف می‌شود.

در این بخش، کمی درباره مدل‌های خطی تعمیم‌یافته آموختید که وقتی خروجی از توزیع گاوسی پیروی نمی‌کند مفید هستند. در ادامه نگاهی می‌اندازیم به چگونگی افزودن تعامل بین دو ویژگی به مدل رگرسیون خطی.

تعاملات

مدل رگرسیون خطی فرض می‌کند اثر هر ویژگی مستقل از مقادیر سایر ویژگی‌هاست — یعنی هیچ تعاملی وجود ندارد. اما در بسیاری از مسائل واقعی تعاملات وجود دارند. برای مثال، در پیش‌بینی تعداد دوچرخه‌های اجاره‌شده، شاید تعامل بین دما و روز کاری وجود داشته باشد: در روزهای تعطیل، مردم برای تفریح دوچرخه می‌رانند و دما تأثیر زیادی دارد؛ اما در روزهای کاری، بسیاری صرف‌نظر از دما دوچرخه می‌رانند.

چگونه تعاملات را به مدل اضافه کنیم؟

راه‌حل ساده است: پیش از برازش مدل، یک ستون جدید به ماتریس ویژگی اضافه کنید که حاصلضرب دو ویژگی مورد نظر است.

تعامل ویژگی دسته‌ای × عددی:

فرض کنید ویژگی‌های «روز کاری» (work: Y/N) و «دما» (temp) داریم:

جدول ۸.۲: داده‌های خام

روز کاریدماهدف
N25...
N12...
Y30...
Y5...

جدول ۸.۳: ماتریس ورودی بدون تعامل

عرض از مبدأworkYtemp
1125
1012
1030
115

جدول ۸.۴: ماتریس ورودی با ستون تعامل workY.temp

عرض از مبدأworkYtempworkY.temp
112525
10120
10300
1155

ستون workY.temp برای روزهای غیرکاری صفر است و برای روزهای کاری برابر مقدار دماست. با این کدگذاری، مدل می‌تواند شیب متفاوتی برای دما در روزهای کاری و غیرکاری یاد بگیرد.

تعامل دو ویژگی دسته‌ای:

برای دو ویژگی دسته‌ای مثل روز کاری (Y/N) و آب‌وهوا (G=خوب، B=بد، M=مه‌آلود)، ستون‌های تعامل برای هر ترکیب ممکن از دسته‌ها (به‌جز دسته مرجع) ایجاد می‌شوند:

جدول ۸.۵: داده‌های خام دو ویژگی دسته‌ای

روز کاریآب‌وهواهدف
NB...
NG...
NM...
YB...

جدول ۸.۶: ماتریس ورودی با تعاملات دسته‌ای

عرض از مبدأworkYwthrGwthrMworkY.wthrGworkY.wthrM
110000
101000
100100
110000

برای دو ویژگی عددی، ستون تعامل کافی است که حاصلضرب مستقیم دو ویژگی باشد.

مثال: پیش‌بینی اجاره دوچرخه با تعامل

با اضافه کردن تعامل بین دما و روز کاری به مدل اجاره دوچرخه:

جدول ۸.۷: وزن‌های برآوردشده با ترم تعامل workdayY:temp

ویژگیوزنخطای استانداردبازه اطمینان ۹۵٪
عرض از مبدأ2385.1355.4[1686.8، 3083.5]
فصل بهار433.2168.5[102.1، 764.2]
فصل تابستان239.3216.9[-186.9، 665.5]
فصل پاییز618.0151.5[320.4، 915.6]
تعطیلی-434.7236.9[-900.1، 30.8]
روز کاری776.7200.6[382.5، 1171.0]
آب‌وهوای مه‌آلود-374.9119.5[-609.8، -140.0]
آب‌وهوای بد-1802.3303.2[-2398.2، -1206.4]
دما74.512.7[49.5، 99.5]
رطوبت-21.74.5[-30.6، -12.9]
سرعت باد-45.59.4[-64.0، -27.0]
تعداد دوچرخه ۲ روز قبل0.60.0[0.5، 0.6]
workdayY:temp-34.411.2[-56.4، -12.5]

ترم تعامل (workdayY:temp) با وزن ۳۴.۴− معنادار است — بازه اطمینان آن از صفر عبور نمی‌کند.

نکته مهم در تفسیر تعامل

نمی‌توان وزن تعامل را به‌تنهایی تفسیر کرد. برای فهمیدن اثر دما در یک روز کاری، باید هر دو وزن را جمع بزنیم:

  • شیب دما در روزهای غیرکاری: 74.5 (مستقیماً از جدول)
  • شیب دما در روزهای کاری: 74.5 + (-34.4) = 40.1

یعنی دما در روزهای کاری تأثیر کمتری (اما همچنان مثبت) دارد. این موضوع در نمودار زیر به وضوح قابل مشاهده است:

شکل ۸.۵

شکل ۸.۵: تعامل بین دما و روز کاری در پیش‌بینی اجاره دوچرخه. دو شیب متفاوت برای روزهای کاری (Y) و غیرکاری (N) نشان داده شده است.

اثرات غیرخطی — GAM ها

دنیا خطی نیست. خطی بودن در مدل‌های خطی به این معناست که فرقی نمی‌کند یک نمونه در یک ویژگی خاص چه مقداری داشته باشد؛ افزایش آن مقدار به اندازه یک واحد همیشه اثر یکسانی روی خروجی پیش‌بینی‌شده دارد. آیا منطقی است فرض کنیم افزایش دما به اندازه یک درجه در دمای ۱۰ درجه سانتی‌گراد، همان اثری را روی تعداد دوچرخه‌های اجاره‌شده دارد که افزایش دما وقتی از قبل ۳۰ درجه است؟ به‌طور شهودی، انتظار می‌رود افزایش دما از ۱۰ به ۱۱ درجه اثر مثبتی بر اجاره دوچرخه داشته باشد و افزایش از ۳۰ به ۳۱ درجه اثری منفی — که همان‌طور که در ادامه کتاب در مثال‌های متعدد خواهید دید، همین‌طور هم هست. ویژگی دما در بازه‌ای اثر خطی و مثبت روی تعداد دوچرخه‌های اجاره‌شده دارد، اما از نقطه‌ای به بعد این اثر تخت می‌شود و در دماهای بالا حتی منفی می‌شود. مدل خطی اهمیتی به این موضوع نمی‌دهد؛ آن به‌طور وظیفه‌شناسانه بهترین ابرصفحه خطی را (با کمینه‌کردن فاصله اقلیدسی) برازش می‌دهد.

می‌توانید روابط غیرخطی را با یکی از تکنیک‌های زیر مدل‌سازی کنید:

  • تبدیل ساده ویژگی (مثلاً لگاریتم)
  • گسسته‌سازی (دسته‌ای‌کردن) ویژگی
  • مدل‌های جمعی تعمیم‌یافته (GAMs)

پیش از پرداختن به جزئیات هر روش، بیایید با مثالی شروع کنیم که هر سه را نشان می‌دهد. من مجموعه‌داده اجاره دوچرخه را برداشتم و یک مدل خطی فقط با ویژگی دما آموزش دادم تا تعداد دوچرخه‌های اجاره‌شده را پیش‌بینی کند. شکل ۸.۶ شیب برآوردشده را با چهار روش نشان می‌دهد: مدل خطی استاندارد، مدل خطی با دمای تبدیل‌شده (لگاریتم)، مدل خطی با دمای دسته‌بندی‌شده به‌عنوان ویژگی دسته‌ای، و استفاده از اسپلاین‌های رگرسیونی (GAM). مدل خطی (بالا-چپ) به‌خوبی روی داده‌ها برازش نمی‌شود. یک راه‌حل، تبدیل ویژگی با مثلاً لگاریتم است (بالا-راست)، دسته‌ای‌کردن آن (پایین-چپ) که معمولاً تصمیم بدی است، یا استفاده از مدل‌های جمعی تعمیم‌یافته که می‌توانند به‌طور خودکار یک منحنی هموار برای دما برازش دهند (پایین-راست).

شکل ۸.۶

شکل ۸.۶: چهار مدل برای پیش‌بینی اجاره دوچرخه فقط با استفاده از دما. هر نقطه یک نمونه داده است و منحنی‌ها پیش‌بینی‌های مدل را نشان می‌دهند: (بالا-چپ) مدل خطی معمولی — برازش ضعیف؛ (بالا-راست) تبدیل لگاریتمی؛ (پایین-چپ) گسسته‌سازی ویژگی؛ (پایین-راست) GAM با اسپلاین — بهترین برازش.

۱. تبدیل ویژگی

یک روش ساده برای مدل‌سازی روابط غیرخطی، تبدیل ویژگی است. پرکاربردترین تبدیل، لگاریتم طبیعی است. استفاده از لگاریتم به این معناست که هر ده‌برابر شدن دما اثر خطی یکسانی روی تعداد دوچرخه‌ها دارد، پس تغییر از ۱ درجه سانتی‌گراد به ۱۰ درجه همان اثری را دارد که تغییر از ۰٫۱ به ۱ درجه (که به نظر عجیب می‌رسد). سایر گزینه‌های تبدیل شامل جذر، توان دوم، و تابع نمایی هستند.

با تبدیل ویژگی، ستون آن ویژگی در داده با تابعی از آن — مانند لگاریتم — جایگزین می‌شود و مدل خطی مثل همیشه برازش می‌شود. برخی نرم‌افزارهای آماری هم به شما اجازه می‌دهند تبدیل را مستقیماً در فراخوانی مدل خطی مشخص کنید. در انتخاب تبدیل می‌توانید خلاقانه عمل کنید. تفسیر ویژگی بر اساس تبدیل انتخاب‌شده تغییر می‌کند. اگر از تبدیل لگاریتمی استفاده کنید، تفسیر در یک مدل خطی این‌طور می‌شود: «اگر لگاریتم ویژگی یک واحد افزایش یابد، پیش‌بینی به اندازه وزن متناظر افزایش می‌یابد.» وقتی از یک GLM با تابع پیوندی غیر از تابع همانی استفاده می‌کنید، تفسیر پیچیده‌تر می‌شود، چون باید هر دو تبدیل را در تفسیر لحاظ کنید (مگر وقتی یکدیگر را خنثی کنند، مثل لگاریتم و تابع نمایی، که در آن صورت تفسیر ساده‌تر می‌شود).

۲. گسسته‌سازی ویژگی

روش دیگر برای رسیدن به یک اثر غیرخطی، گسسته‌سازی ویژگی است — یعنی تبدیل آن به ویژگی دسته‌ای. برای مثال، می‌توانید ویژگی دما را به ۲۰ بازه با سطوحی مانند $[-10, -5)$، $[-5, 0)$ و به همین ترتیب تقسیم کنید. وقتی به‌جای دمای پیوسته از دمای گسسته‌شده استفاده کنید، مدل خطی یک تابع پله‌ای برآورد می‌کند، چون هر سطح برآورد جداگانه خودش را می‌گیرد.

مشکل این رویکرد این است که به داده بیشتری نیاز دارد، احتمال بیش‌برازش بالاتر می‌رود، و مشخص نیست چطور باید ویژگی را به‌طور معناداری گسسته کرد (بازه‌های هم‌فاصله یا صدک‌ها؟ چند بازه؟). من گسسته‌سازی را تنها زمانی توصیه می‌کنم که دلیل بسیار قوی‌ای برای آن وجود داشته باشد — مثلاً برای قابل‌مقایسه‌کردن مدل با یک پژوهش دیگر.

۳. مدل‌های جمعی تعمیم‌یافته (GAMs)

چرا به مدل خطی اجازه ندهیم روابط غیرخطی را خودش یاد بگیرد؟ این انگیزه اصلی GAMs است. GAM قید خطی بودن را حذف می‌کند و فرض می‌کند خروجی با مجموعی از توابع دلخواه هر ویژگی قابل مدل‌سازی است:

$$g\!\left[\mathbb{E}(Y \mid X = \mathbf{x})\right] = \beta_0 + f_1(x_1) + f_2(x_2) + \ldots + f_p(x_p)$$

این فرمول شبیه GLM است با این تفاوت که جمله خطی $\beta_j x_j$ با تابع انعطاف‌پذیر $f_j(x_j)$ جایگزین شده. مدل همچنان جمعی است — مجموع اثرات تک‌تک ویژگی‌هاست — اما هر ویژگی می‌تواند اثر غیرخطی داشته باشد. اثرات خطی نیز در این چارچوب جا می‌گیرند: کافی است $f_j$ را محدود به شکل $\beta_j x_j$ کنیم.

توضیح مترجم: فرق اصلی بین $\beta_j x_j$ و $f_j(x_j)$ در همین است که چند عدد لازم است تا اثر یک ویژگی توصیف شود. در مدل خطی، اثر دما را با یک عدد تنها ($\beta_{\text{temp}}$) خلاصه می‌کنیم — مثلاً «هر درجه افزایش دما، ۵۰ دوچرخه بیشتر». اما در GAM، اثر دما دیگر یک عدد نیست، بلکه یک تابع ($f_{\text{temp}}$) یا معادل آن یک منحنی است؛ یعنی به‌جای یک شیب ثابت برای همه دماها، مدل اجازه دارد شیب اثر دما در دماهای پایین مثبت باشد و در دماهای بالا منفی شود (دقیقاً همان چیزی که در ابتدای این بخش درباره ۱۰ در برابر ۳۰ درجه گفته شد). به همین دلیل هم تفسیر GAM سخت‌تر از مدل خطی است: باید به یک نمودار نگاه کنید، نه به یک عدد.

اسپلاین‌ها: ابزار یادگیری GAM

سؤال اساسی این است که چگونه توابع $f_j$ غیرخطی یاد گرفته می‌شوند. پاسخ را «اسپلاین‌ها» یا «توابع اسپلاین» می‌نامند. اسپلاین‌ها توابعی هستند که از ترکیب توابع پایه ساده‌تر ساخته می‌شوند و می‌توان با آن‌ها به توابع دیگر، پیچیده‌تر، تقریب زد — کمی شبیه روی‌هم‌گذاشتن آجرهای لگو برای ساختن چیزی پیچیده‌تر. راه‌های تعریف این توابع پایه اسپلاین به‌قدری زیادند که گیج‌کننده‌اند؛ اگر دوست دارید بیشتر درباره همه این روش‌ها بدانید، برایتان در این مسیر آرزوی موفقیت می‌کنم! اینجا قصد ندارم وارد جزئیات شوم، فقط می‌خواهم یک شهود بسازم. آنچه شخصاً بیشترین کمک را برای فهم اسپلاین‌ها به من کرد، تجسم تک‌تک توابع پایه و نگاه‌کردن به این بود که ماتریس داده چگونه تغییر می‌کند.

برای مدل‌سازی دما با اسپلاین، ستون دما از داده حذف و با چند ستون جدید (توابع پایه اسپلاین) جایگزین می‌شود — معمولاً تعداد توابع پایه بیشتر از این است؛ من فقط برای نمایش ساده‌تر، تعدادشان را کم کرده‌ام:

جدول ۸.۸: ماتریس داده برای GAM با ۴ تابع پایه اسپلاین برای دما

عرض از مبدأs(temp).1s(temp).2s(temp).3s(temp).4
11.33-0.70-0.39-1.64
11.33-0.69-0.37-1.62
11.30-0.57-0.25-1.47
11.32-0.67-0.35-1.59
11.33-0.70-0.39-1.64
11.35-0.82-0.53-1.81

مقدار هر نمونه در این ستون‌های جدید به مقدار دمای آن نمونه بستگی دارد. شکل این توابع پایه:

شکل ۸.۷

شکل ۸.۷: چهار تابع پایه اسپلاین برای ویژگی دما. هر تابع پایه بخشی از دامنه دما را پوشش می‌دهد.

GAM وزن‌هایی برای این توابع پایه یاد می‌گیرد:

عرض از مبدأs(temp).1s(temp).2s(temp).3s(temp).4
4519.6-922.04-740.592333.45611.39

برای درک بهتر (توضیح مترجم): بیایید همین محاسبه را برای یک نمونه از جدول ۸.۸ (سطر اول) دستی انجام دهیم. مقادیر چهار ستون اسپلاین برای این نمونه عبارت‌اند از $1.33،\ -0.70،\ -0.39،\ -1.64$. اثر دما برای این نمونه، یعنی $f_{\text{temp}}(x)$، از ضرب هر ستون در وزن متناظرش و جمع‌کردن نتایج به دست می‌آید: $$f_{\text{temp}}(x) = (1.33)(-922.04) + (-0.70)(-740.59) + (-0.39)(2333.45) + (-1.64)(611.39) \approx -1226 + 518 - 910 - 1003 = -2621$$ یعنی برای این نمونه‌ی خاص (دمای پایین)، اثر دما حدود ۲۶۲۱ واحد کمتر از میانگین پیش‌بینی است — دقیقاً همان الگویی که در شکل ۸.۸ برای دماهای نزدیک صفر درجه دیده می‌شود. نکته مهم این است که این چهار عدد وزن، هرکدام به‌تنهایی معنای مستقیم و قابل‌تفسیری ندارند؛ فقط وقتی همه را کنار هم و طبق مقادیر توابع پایه در شکل ۸.۷ جمع بزنیم، به یک عدد قابل‌فهم (سهم دما در پیش‌بینی) می‌رسیم.

منحنی اسپلاین نهایی، حاصلضرب توابع پایه در وزن‌هایشان و جمع آن‌هاست:

شکل ۸.۸

شکل ۸.۸: منحنی اسپلاین برازش‌یافته برای اثر دما بر تعداد دوچرخه‌های اجاره‌شده. اسپلاین‌ها معمولاً حول میانگین پیش‌بینی مرکزیده می‌شوند. مثلاً در صفر درجه سانتیگراد، تعداد پیش‌بینی‌شده دوچرخه حدود ۳۰۰۰ کمتر از میانگین است.

برای تفسیر اثرات هموار (smooth effects)، لازم است منحنی برازش‌یافته را بصری بررسی کنیم — یک عدد واحد کافی نیست. GAM همچنین یک جمله جریمه برای وزن‌ها اعمال می‌کند تا آن‌ها را نزدیک به صفر نگه دارد؛ این کار عملاً انعطاف‌پذیری اسپلاین‌ها را کاهش می‌دهد و از بیش‌برازش جلوگیری می‌کند. پارامتر هموارسازی که معمولاً برای کنترل انعطاف‌پذیری منحنی استفاده می‌شود، از طریق اعتبارسنجی متقاطع تنظیم می‌شود. اگر از بهینه‌سازی همراه با جمله جریمه صرف‌نظر کنیم، مدل‌سازی غیرخطی با اسپلاین‌ها چیزی شبیه مهندسی ویژگی (feature engineering) خیال‌پردازانه به نظر می‌رسد.

توضیح مترجم: این جمله جریمه دقیقاً همان دلیلی است که GAM بین دو خطر افراطی تعادل برقرار می‌کند. اگر هیچ جریمه‌ای وجود نداشت، مدل آزاد بود هر پیچ‌وتابی را که حتی نویز تصادفی داده‌ها ایجاد کرده دنبال کند و یک منحنی بسیار پرتاب‌وتاب (بیش‌برازش‌شده) بسازد که روی داده‌های آموزشی عالی عمل می‌کند اما روی داده‌های جدید ضعیف است. اگر جریمه خیلی زیاد باشد، منحنی آن‌قدر «صاف» می‌شود که تقریباً به یک خط راست (یعنی همان مدل خطی ساده) برمی‌گردد و اثرات غیرخطی واقعی داده از دست می‌روند (کم‌برازش). پارامتر هموارسازی دقیقاً محل این تعادل را کنترل می‌کند، و اعتبارسنجی متقاطع کمک می‌کند مقداری برای آن انتخاب شود که نه بیش‌برازش کند و نه کم‌برازش.

مزایا

تمام این گسترش‌های مدل خطی یک دنیای کامل در خود هستند. هر مشکلی که با مدل خطی ساده داشته باشید، احتمالاً گسترشی وجود دارد که آن را برطرف کند.

بیشتر این روش‌ها چند دهه سابقه دارند؛ برای مثال، عمر GAM‌ها تقریباً به ۳۰ سال می‌رسد. بسیاری از پژوهشگران و متخصصان صنعت با مدل‌های خطی تجربه بسیار زیادی دارند و این روش‌ها در بسیاری از جوامع علمی به‌عنوان روش استاندارد و پذیرفته‌شده مدل‌سازی شناخته می‌شوند.

علاوه بر پیش‌بینی، این مدل‌ها امکان استنتاج آماری را فراهم می‌کنند — با فرض اینکه مفروضات نقض نشده باشند: فاصله اطمینان برای وزن‌ها، آزمون معناداری، فاصله اطمینان پیش‌بینی، و بسیاری موارد دیگر.

نرم‌افزارهای آماری معمولاً رابط‌های بسیار خوبی برای برازش GLM، GAM، و مدل‌های خطی تخصصی دارند.

تیرگی بسیاری از مدل‌های یادگیری ماشین ناشی از: ۱) نداشتن تنکی — تعداد زیادی ویژگی استفاده می‌شود؛ ۲) اثرات غیرخطی — یک عدد برای توصیف کافی نیست؛ و ۳) تعاملات بین ویژگی‌هاست. گسترش‌های معرفی‌شده در این فصل یک گذار تدریجی از مدل‌های کاملاً تفسیرپذیر به مدل‌های انعطاف‌پذیرتر را ممکن می‌سازند.

محدودیت‌ها

پیچیدگی گزینه‌ها: تعداد روش‌های موجود برای گسترش مدل‌های خطی می‌تواند گیج‌کننده باشد، حتی برای متخصصان. جوامع مختلف علمی اغلب نام‌های متفاوتی برای روش‌هایی دارند که کمابیش یک کار می‌کنند.

کاهش تفسیرپذیری: هر تغییری در مدل خطی ساده، آن را کمتر تفسیرپذیر می‌کند. تابع پیوند غیر همانی در GLM تفسیر را پیچیده می‌کند؛ تعاملات نیز همین‌طور؛ اثرات غیرخطی در GAM دیگر با یک عدد قابل خلاصه‌سازی نیستند.

وابستگی به مفروضات: GLM، GAM، و سایر روش‌ها همگی مفروضاتی درباره فرایند تولید داده دارند. اگر این مفروضات نقض شوند، تفسیر وزن‌ها دیگر معتبر نیست.

عملکرد پایین‌تر: عملکرد روش‌های ترکیبی مبتنی بر درخت مانند جنگل تصادفی یا گرادیان بوستینگ درخت، در بسیاری از موارد بهتر از پیچیده‌ترین مدل‌های خطی است. این ادعا تا حدی برگرفته از تجربه شخصی من و تا حدی از مشاهده مدل‌های برنده در مسابقاتی است که وب‌سایت‌هایی مثل kaggle.com میزبانی می‌کنند.

نکته: از ابزارهای مستقل از مدل استفاده کنید هرچه با تبدیل‌ها، تعاملات، و اثرات هموار بیشتر از رگرسیون خطی محض فاصله بگیرید، احتمالاً بیشتر به ابزارهای مستقل از مدل (model-agnostic) مانند نمودار وابستگی جزئی برای تحلیل مدل نیاز خواهید داشت.

نرم‌افزار

تمام مثال‌های این فصل با زبان R پیاده‌سازی شدند. برای GAM از بسته gam استفاده شد، اگرچه گزینه‌های دیگری نیز وجود دارند. R تعداد باورنکردنی بسته برای گسترش رگرسیون خطی دارد و در این زمینه بی‌رقیب است.

در Python، پیاده‌سازی‌هایی از GAM مانند pyGAM وجود دارد، اگرچه به بلوغ اکوسیستم R نرسیده‌اند. بسته PiML در پایتون نیز نسخه‌های گوناگونی از GAM را پیاده‌سازی می‌کند.

گسترش‌های بیشتر

در ادامه فهرستی از مشکلات رایج با مدل‌های خطی و نام راه‌حل‌های آن‌ها برای جستجو ارائه می‌شود:

  • داده‌ها IID نیستند (مثلاً اندازه‌گیری‌های تکراری از یک بیمار): به دنبال Mixed Models یا Generalized Estimating Equations بگردید.
  • خطاهای ناهمسانی واریانس (مثلاً در پیش‌بینی قیمت خانه، خطا برای خانه‌های گران‌تر بزرگ‌تر است): به دنبال Robust Regression بگردید.
  • نقاط پرت تأثیرگذار: به دنبال Robust Regression بگردید.
  • پیش‌بینی زمان تا وقوع رویداد (با مشاهدات سانسورشده): به دنبال Parametric Survival Models، Cox Regression، یا Survival Analysis بگردید.
  • خروجی دسته‌ای (چند دسته): برای دو دسته از رگرسیون لجستیک استفاده کنید؛ برای بیشتر به دنبال Multinomial Regression بگردید.
  • دسته‌های مرتب (مثلاً نمرات تحصیلی): به دنبال Proportional Odds Model بگردید.
  • خروجی شمارشی (مثلاً تعداد فرزندان): به دنبال Poisson Regression بگردید. اگر صفر خیلی فراوان است: Zero-Inflated Poisson Regression یا Hurdle Model.
  • استنتاج علّی (کدام ویژگی‌ها باید در مدل باشند؟): به دنبال Causal Inference و Mediation Analysis بگردید.
  • داده‌های ناقص: به دنبال Multiple Imputation بگردید.
  • ادغام دانش پیشین: به دنبال Bayesian Inference بگردید.