فصل ۷: رگرسیون لجستیک

عنوان اصلی: Logistic Regression
منبع: https://christophm.github.io/interpretable-ml-book/logistic.html
نویسنده: Christoph Molnar
مترجم: مریم محمودی


رگرسیون لجستیک احتمال‌ها را برای مسائل دسته‌بندی با دو نتیجه ممکن مدل می‌کند. این مدل بسط رگرسیون خطی برای نتایج دسته‌ای است.1

نکته: فقط به‌دنبال تفسیر درست مدل‌های رگرسیون لجستیک هستید؟ برای صرفه‌جویی در وقت و دردسر (لگاریتم شانس، کسی هست؟)، به راهنمای تقلب (cheat sheet) تفسیر رگرسیون لجستیک نویسنده مراجعه کنید.

از رگرسیون خطی برای دسته‌بندی استفاده نکنید

مدل رگرسیون خطی می‌تواند برای رگرسیون به‌خوبی کار کند، اما برای دسته‌بندی شکست می‌خورد. چرا؟ در حالت دو دسته، می‌توانید یکی از دسته‌ها را با ۰ و دیگری را با ۱ برچسب بزنید و رگرسیون خطی به کار ببرید. از نظر فنی این کار می‌کند و بیشتر برنامه‌های مدل خطی وزن‌هایی به شما می‌دهند. اما این رویکرد چند مشکل دارد:

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

یک مدل خطی همچنین برون‌یابی می‌کند و مقادیری زیر صفر و بالای یک به شما می‌دهد. این خود نشانه خوبی است که ممکن است رویکرد هوشمندانه‌تری برای دسته‌بندی وجود داشته باشد.

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

مدل‌های خطی به مسائل دسته‌بندی با چند دسته تعمیم نمی‌یابند. باید شروع کنید به برچسب‌گذاری دسته بعدی با ۲، سپس ۳ و به همین ترتیب. ممکن است دسته‌ها هیچ ترتیب معناداری نداشته باشند، اما مدل خطی ساختاری عجیب بر رابطه بین ویژگی‌ها و پیش‌بینی دسته‌ها تحمیل می‌کند. هرچه مقدار یک ویژگی با وزن مثبت بیشتر باشد، سهم بیشتری در پیش‌بینی دسته‌ای با عدد بالاتر دارد — حتی اگر دسته‌هایی که به‌طور اتفاقی عدد مشابهی گرفته‌اند، به هم نزدیک‌تر از سایر دسته‌ها نباشند.

شکل ۷.۱

شکل ۷.۱: برازش یک مدل خطی برای پیش‌بینی نوع تومور (شبیه‌سازی‌شده) بر اساس اندازه تومور. نقاط برای کاهش هم‌پوشانی کمی جیتر (jitter) داده شده‌اند. چپ: استفاده از آستانه ۰.۵ یک دسته‌بند قابل‌قبول به دست می‌دهد. راست) افزودن تنها دو نقطه داده دیگر، برآوردهای رگرسیون را کاملاً تغییر می‌دهد و آستانه ۰.۵ را بی‌معنا می‌کند. مدل همچنین پیش‌بینی‌هایی بزرگ‌تر از ۱ تولید می‌کند.

نظریه

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

تابع لجستیک

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

$$\text{logistic}(\mathbf{z}) = \frac{1}{1 + \exp(-\mathbf{z})}$$

این تابع هر عدد واقعی $z$ را به بازه $(0, 1)$ نگاشت می‌کند:

  • وقتی $z \to +\infty$، خروجی به ۱ نزدیک می‌شود.
  • وقتی $z \to -\infty$، خروجی به ۰ نزدیک می‌شود.
  • وقتی $z = 0$، خروجی دقیقاً $0.5$ است.

شکل ۷.۲

شکل ۷.۲: تابع لجستیک. این تابع هر ورودی حقیقی را به مقداری بین ۰ و ۱ تبدیل می‌کند و شکل S-مانند دارد.

مدل رگرسیون لجستیک

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

$$\hat{y}^{(i)} = \beta_0 + \beta_1 x^{(i)}_1 + \ldots + \beta_p x^{(i)}_p$$

برای دسته‌بندی، به احتمال‌هایی بین ۰ و ۱ نیاز داریم. پس طرف راست معادله را درون تابع لجستیک قرار می‌دهیم تا خروجی همیشه در این بازه بماند:

$$\mathbb{P}(Y^{(i)}=1) = \text{logistic}\!\left(x^{(i)\top} \boldsymbol{\beta}\right) = \frac{1}{1 + \exp\!\left(-\left(\beta_0 + \beta_1 x^{(i)}_1 + \ldots + \beta_p x^{(i)}_p\right)\right)}$$

در این فرمول، $\mathbb{P}(Y^{(i)}=1)$ احتمال تعلق نمونه $i$ به دسته ۱ است.

مدل با بیشینه‌سازی درست‌نمایی (Maximum Likelihood Estimation) برازش می‌شود — یعنی ضرایبی پیدا می‌شوند که احتمال مشاهده داده‌های آموزشی را بیشینه کنند. برخلاف رگرسیون خطی، راه‌حل بسته (closed-form) وجود ندارد و از روش‌های بهینه‌سازی تکراری مانند گرادیان نزولی استفاده می‌شود.

بیایید دوباره مثال اندازه تومور را مرور کنیم. اما این بار، به‌جای مدل رگرسیون خطی، از مدل رگرسیون لجستیک استفاده می‌کنیم و منحنی برازشی به‌مراتب بهتری به دست می‌آوریم (شکل ۷.۳ را ببینید).

شکل ۷.۳

شکل ۷.۳: چپ: مدل رگرسیون لجستیک برازش‌شده برای پیش‌بینی دسته تومور از روی اندازه تومور، بر اساس داده‌های شبیه‌سازی‌شده تومور. راست: رگرسیون لجستیک حتی با افزودن دو نقطه پرت (outlier) نیز پایدار (robust) می‌ماند.

دسته‌بندی با رگرسیون لجستیک بهتر انجام می‌شود و در هر دو حالت می‌توانیم از آستانه $0.5$ استفاده کنیم. افزودن نقاط داده اضافی عملاً تأثیری بر منحنی برآوردشده ندارد.

تفسیر

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

لگاریتم شانس (Log-Odds)

نسبت $\frac{\mathbb{P}(Y=1)}{\mathbb{P}(Y=0)}$ را شانس (odds) می‌نامند: احتمال وقوع رویداد تقسیم بر احتمال عدم وقوع آن. اگر لگاریتم طبیعی این نسبت را بگیریم، به لگاریتم شانس (log-odds یا logit) می‌رسیم:

$$\ln\!\left(\frac{\mathbb{P}(Y=1)}{1-\mathbb{P}(Y=1)}\right) = \ln\!\left(\frac{\mathbb{P}(Y=1)}{\mathbb{P}(Y=0)}\right) = \beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p$$

توضیح مترجم: این رابطه ادعای بزرگی است — چرا وقتی روی $p = \mathbb{P}(Y=1)$ تابع لجستیک اعمال شده، لگاریتمِ نسبتِ $\frac{p}{1-p}$ دقیقاً به همان ترکیب خطی $z = \beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p$ برمی‌گردد که با آن شروع کرده بودیم؟ اثبات کامل و گام‌به‌گام این‌طور است:

گام ۱ — نقطه شروع. طبق تعریف مدل، $p$ برابر است با تابع لجستیک اعمال‌شده روی $z$: $$p = \text{logistic}(z) = \frac{1}{1+\exp(-z)}$$

گام ۲ — محاسبه $1-p$. برای ساده‌سازی، عبارت $1$ را با مخرج مشترک $1+\exp(-z)$ می‌نویسیم: $$1 - p = 1 - \frac{1}{1+\exp(-z)} = \frac{\left(1+\exp(-z)\right) - 1}{1+\exp(-z)} = \frac{\exp(-z)}{1+\exp(-z)}$$

گام ۳ — محاسبه نسبت شانس $\frac{p}{1-p}$. حالا کسر $p$ را بر کسر $1-p$ تقسیم می‌کنیم. چون هر دو کسر مخرج مشترک $1+\exp(-z)$ دارند، این مخرج در تقسیم ساده می‌شود: $$\frac{p}{1-p} = \frac{\dfrac{1}{1+\exp(-z)}}{\dfrac{\exp(-z)}{1+\exp(-z)}} = \frac{1}{1+\exp(-z)} \times \frac{1+\exp(-z)}{\exp(-z)} = \frac{1}{\exp(-z)}$$

از قاعده توان $\frac{1}{\exp(-z)} = \exp(z)$ (چون $\exp(-z) = 1/\exp(z)$)، نتیجه می‌گیریم: $$\text{odds} = \frac{p}{1-p} = \exp(z)$$

این خودش نکته‌ی مهمی است: شانس (odds) صرفاً $\exp$ از همان ترکیب خطی $z$ است — بدون هیچ نگاشت غیرخطی اضافه‌ای.

گام ۴ — گرفتن لگاریتم طبیعی از دو طرف. چون $\ln$ و $\exp$ معکوس یکدیگرند ($\ln(\exp(z)) = z$)، داریم: $$\ln\!\left(\frac{p}{1-p}\right) = \ln\!\left(\exp(z)\right) = z = \beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p$$

یعنی دقیقاً همان رابطه بالا. به زبان ساده: تابع لجستیک و لگاریتمِ نسبتِ شانس (logit) دقیقاً معکوس ریاضی یکدیگرند — یکی $z$ را به $p$ می‌برد، دیگری $p$ را دقیقاً به همان $z$ برمی‌گرداند. به همین دلیل است که رگرسیون لجستیک را می‌توان این‌گونه توصیف کرد: «یک مدل خطی روی $z$، که از دریچه‌ی تابع لجستیک به احتمال $p$ نگاشت می‌شود، و از دریچه‌ی معکوسش (logit) دوباره به همان $z$ خطی بازمی‌گردد.»

این رابطه نشان می‌دهد که رگرسیون لجستیک در فضای لگاریتم شانس یک مدل خطی است. هر ضریب $\beta_j$ اثر خطی مستقیم بر لگاریتم شانس دارد. عالی! انگار خیلی هم به کارمان نمی‌آید!

هشدار — رگرسیون لجستیک ضربی است: در سطح احتمال، رگرسیون لجستیک نسبت به ویژگی‌ها خطی نیست؛ یعنی افزایش یک واحد در یک ویژگی، احتمال را به اندازه $\beta_j$ افزایش نمی‌دهد، بلکه احتمال را به‌صورت ضربی تغییر می‌دهد.

نسبت شانس (Odds Ratio)

با کمی جابه‌جایی جملات می‌توانیم بفهمیم پیش‌بینی چگونه تغییر می‌کند وقتی یکی از ویژگی‌ها، $X_j$، به اندازه یک واحد تغییر کند. برای این کار، ابتدا تابع $\exp$ را روی هر دو طرف معادله اعمال می‌کنیم:

$$\frac{\mathbb{P}(Y=1)}{1 - \mathbb{P}(Y = 1)} = \text{odds} = \exp\!\left(\beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p\right)$$

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

$$\frac{\text{odds}_{x_j+1}}{\text{odds}_{x_j}} = \frac{\exp\!\left(\beta_0 + \cdots + \beta_j(x_j+1) + \cdots + \beta_p x_p\right)}{\exp\!\left(\beta_0 + \cdots + \beta_j x_j + \cdots + \beta_p x_p\right)}$$

با استفاده از قاعده زیر:

$$\frac{\exp(a)}{\exp(b)} = \exp(a - b)$$

جملات مشترک حذف می‌شوند:

$$\frac{\text{odds}_{x_j+1}}{\text{odds}_{x_j}} = \exp\!\left(\beta_j(x_j+1) - \beta_j x_j\right) = \exp\!\left(\beta_j\right)$$

در نهایت، به چیزی به سادگی $\exp()$ از وزن یک ویژگی می‌رسیم. تغییر یک ویژگی به اندازه یک واحد، نسبت شانس (odds ratio) را به‌صورت ضربی، به اندازه $\exp(\beta_j)$، تغییر می‌دهد. می‌توانیم این را این‌طور هم تفسیر کنیم: تغییر $x^{(i)}_j$ به اندازه یک واحد، لگاریتم نسبت شانس را به اندازه مقدار وزن متناظر افزایش می‌دهد.

بیشتر افراد نسبت شانس را تفسیر می‌کنند، چون فکر کردن به لگاریتم یک عدد برای مغز کار سختی است. تفسیر نسبت شانس هم خودش به کمی عادت‌کردن نیاز دارد. برای مثال، اگر شانس برابر ۲ باشد، یعنی احتمال $Y=1$ دو برابر احتمال $Y=0$ است. اگر وزنی (لگاریتم نسبت شانس) برابر $0.7$ داشته باشید، افزایش یک واحد در ویژگی متناظر، شانس را در $\exp(0.7)$ (تقریباً ۲) ضرب می‌کند و شانس به ۴ تغییر می‌کند. اما معمولاً با خودِ شانس کار نمی‌کنید و وزن‌ها را فقط به‌صورت نسبت شانس تفسیر می‌کنید؛ چون برای محاسبه واقعی شانس باید مقداری برای هر ویژگی تعیین کنید، که فقط زمانی معنا دارد که بخواهید یک نمونه مشخص از داده‌ها را بررسی کنید.

برای درک بهتر (توضیح مترجم): فرض کنید مدلی برای پیش‌بینی احتمال ابتلا به یک بیماری بر اساس سن دارید و ضریب سن برابر $\beta = 0.05$ است، پس نسبت شانس برابر است با $\exp(0.05) \approx 1.05$؛ یعنی با هر یک سال افزایش سن، شانس ابتلا ۵٪ بیشتر می‌شود (نه احتمال، بلکه شانس). فرض کنید برای فردی ۴۰ ساله شانس ابتلا برابر ۰٫۲ است، که معادل احتمال $0.2/1.2 \approx 16.7%$ است. برای فردی ۴۱ ساله، شانس جدید تقریباً $0.2 \times 1.05 = 0.21$ می‌شود که معادل احتمال $0.21/1.21 \approx 17.4%$ است. همان‌طور که می‌بینید، افزایش احتمال (از ۱۶٫۷٪ به ۱۷٫۴٪) دقیقاً برابر ۵٪ نیست؛ به همین دلیل است که رگرسیون لجستیک در سطح احتمال خطی نیست، هرچند در سطح شانس ضربی و ساده است.

تفسیر بر اساس نوع ویژگی

ویژگی عددی: با افزایش یک واحد در $x_j$، با ثابت ماندن سایر ویژگی‌ها، شانس برآوردشده در $\exp(\beta_j)$ ضرب می‌شود.

ویژگی دودویی (باینری): یکی از دو مقدار ویژگی دسته مرجع است. تغییر $x_j$ از دسته مرجع به دسته دیگر، شانس برآوردشده را در $\exp(\beta_j)$ ضرب می‌کند.

ویژگی دسته‌ای با بیش از دو دسته: رویکرد متداول، کدگذاری یک‌داغ (one-hot encoding) است: برای ویژگی با $L$ دسته، $L-1$ ستون مصنوعی ایجاد می‌شود. دسته $L$ام دسته مرجع می‌شود. تفسیر هر دسته معادل تفسیر ویژگی دودویی است.

عرض از مبدأ $\beta_0$: وقتی تمام ویژگی‌های عددی صفر و تمام ویژگی‌های دسته‌ای در دسته مرجع باشند، شانس برآوردشده برابر $\exp(\beta_0)$ است. معمولاً تفسیر عرض از مبدأ اهمیت چندانی ندارد.

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

مثال

از رگرسیون لجستیک برای پیش‌بینی جنسیت پنگوئن‌های Chinstrap بر اساس اندازه‌گیری‌های بدن استفاده می‌کنیم. داده‌های پنگوئن‌های پالمر در فصل ۵ معرفی شدند.

یکی از ویژگی‌ها chonkiness نام دارد — یک نسخه گسسته‌شده از جرم بدن (body_mass_g):

  • پنگوئن‌های سبک (صدک ۰ تا ۲۵): «Smol_Penguin»
  • پنگوئن‌های معمولی (صدک ۲۵ تا ۷۵): «Regular_Penguin»
  • پنگوئن‌های سنگین (صدک ۷۵ تا ۱۰۰): «Absolute_Unit»

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

جدول ۷.۱: وزن‌های برآوردشده، نسبت‌های شانس متناظر، و خطاهای استاندارد مدل رگرسیون لجستیک برای پیش‌بینی جنسیت پنگوئن‌های Chinstrap.

ویژگیوزن ($\beta$)نسبت شانس ($\exp(\beta)$)خطای استاندارد
عرض از مبدأمقدار بزرگ
طول منقار (bill_length_mm)منفی0.59
عمق منقار (bill_depth_mm)
طول باله (flipper_length_mm)
Regular_Penguin (در برابر Smol)مثبت1.92
Absolute_Unit (در برابر Smol)منفی0.43

نمونه‌های تفسیر

ویژگی عددی: افزایش یک میلی‌متر در طول منقار، با ثابت ماندن سایر ویژگی‌ها، شانس ماده بودن در برابر نر بودن را در $0.59$ ضرب می‌کند — یعنی شانس ماده بودن کاهش می‌یابد.

ویژگی دسته‌ای: شانس ماده بودن برای پنگوئن‌های Regular نسبت به Smol، با ثابت ماندن سایر ویژگی‌ها، $1.92$ برابر بیشتر است. برای پنگوئن‌های Absolute_Unit نسبت به Smol، شانس ماده بودن $0.43$ برابر — یعنی کمتر — است.

تفسیر عرض از مبدأ

مقدار عرض از مبدأ بسیار بزرگ است. این به این دلیل است که باید برای وضعیتی تفسیر شود که تمام ویژگی‌های عددی برابر صفرند و ویژگی chonkiness در دسته مرجع (Smol) باشد — یعنی پنگوئنی با طول منقار، عمق منقار، و طول باله همگی صفر، که اصلاً واقعی نیست. اگر ویژگی‌ها استانداردسازی شوند، عرض از مبدأ معناپذیرتر می‌شود، یا می‌توان آن را نادیده گرفت.

مزایا

بسیاری از نقاط قوت و ضعف مدل رگرسیون خطی برای مدل رگرسیون لجستیک نیز صدق می‌کند.

از جنبه مثبت، مدل رگرسیون لجستیک تنها یک مدل دسته‌بندی نیست، بلکه احتمال هم به شما می‌دهد. این مزیت بزرگی نسبت به مدل‌هایی است که فقط دسته‌بندی نهایی را ارائه می‌دهند. دانستن اینکه یک نمونه ۹۹٪ احتمال تعلق به یک دسته دارد در برابر ۵۱٪، تفاوت بزرگی ایجاد می‌کند. با این حال، باید بررسی کنید که آیا احتمال‌ها کالیبره‌شده هستند یا نه — یعنی آیا ۶۰٪ واقعاً به معنای ۶۰٪ است.

رگرسیون لجستیک همچنین می‌تواند از دسته‌بندی دودویی به دسته‌بندی چندکلاسه بسط داده شود.

محدودیت‌ها

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

تفسیر ضربی: تفسیر ضرایب در قالب نسبت شانس برای بسیاری دشوارتر از تفسیر جمعی رگرسیون خطی است. فهمیدن اینکه «شانس در $\exp(0.7) \approx 2$ ضرب می‌شود» به تمرین بیشتری نیاز دارد.

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

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

نرم‌افزار

من برای همه مثال‌ها از تابع glm در R استفاده کردم. رگرسیون لجستیک را می‌توان در هر زبان برنامه‌نویسی که برای تحلیل داده استفاده می‌شود پیدا کرد، مانند Python، Java، Stata، Matlab و غیره.

1

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