قواعد انجمنی، هموقوعی مجموعهها را در تراکنشها بررسی میکنند؛ مثلاً وقتی A در یک سبد هست، B چند وقت همراه آن دیده میشود. Support، Confidence و Lift سه نگاه متفاوت به همین رابطهاند. فلش A→B به معنی تقدم زمانی یا علتشدن A برای B نیست.
شش سبد کوچک را تعریف کنیم
داده ساختگی این تمرین شش سبد است: سه سبد {A,B}، یک سبد {A}، یک سبد {B} و یک سبد {B,C}. هر سبد یک مجموعه است؛ تکرار یک کالا در همان سبد در این قرارداد یک حضور حساب میشود، نه تعداد واحد خرید. هیچ داده مشتری یا فروش واقعی در مثال نیست.
A در۴ سبد، B در۵ سبد و جفت A,B در۳ سبد حضور دارند. پیش از هر فرمول، واحد تراکنش را روشن کنید؛ سبد خرید با مشتری یکتا یا تماس یکتا یکی نیست. تعریف واحد میتواند نسبتها را تغییر دهد.
Support و Confidence دو مخرج دارند
Support جفت A,B برابر۳÷۶=۰٫۵ است؛ نیمی از همه سبدها هر دو را دارند. Confidence قاعده A→B برابر۳÷۴=۰٫۷۵ است؛ میان سبدهای دارای A، سهچهارم B هم دارند. برای قاعده برعکس، B→A، مقدار confidence برابر۳÷۵=۰٫۶ میشود.
| سنجه | A→B | B→A |
|---|---|---|
| Support جفت | ۰٫۵ | ۰٫۵ |
| Confidence | ۰٫۷۵ | ۰٫۶ |
| Lift | ۰٫۹ | ۰٫۹ |
Support جفت و Lift در این مثال با برعکسشدن جهت یکسان میمانند، اما Confidence لزوماً متقارن نیست. نام «اعتماد» در ترجمه Confidence را هم با بازه اطمینان آماری یا احتمال خرید آینده یک فرد یکی نگیرید.
چرا Confidence بالا میتواند گمراه کند؟
B در کل داده۵÷۶ یعنی حدود۸۳٫۳ درصد سبدهاست. دیدن B در۷۵ درصد سبدهای دارای A، از نرخ پایه B کمتر است. Lift برابر۰٫۷۵÷(۵÷۶)=۰٫۹ میشود. پس با آنکه confidence ظاهراً بالا است، همراهی در این نمونه از مبنای استقلال بیشتر نیست.
این نسبت شاهد رابطه علّی منفی هم نیست. فقط فراوانیهای همین داده را با یک مبنا مقایسه کردهایم. با شش سبد، انتخاب یک برنامه فروش یا اعلام قاعده پایدار موجه نیست؛ تعداد رخداد، زمان، تنوع نمونه و آزمون روی داده تازه باید جدا بررسی شوند.
کد محاسبه مستقیم
transactions=[{'A','B'},{'A','B'},{'A','B'},{'A'},{'B'},{'B','C'}]
def metrics(antecedent,consequent):
if not antecedent or not consequent or antecedent & consequent:
raise ValueError('nonempty disjoint itemsets required')
n=len(transactions)
a=sum(antecedent<=t for t in transactions)
c=sum(consequent<=t for t in transactions)
both=sum((antecedent|consequent)<=t for t in transactions)
if not a or not c:
raise ValueError('undefined confidence or lift')
support=both/n
confidence=both/a
lift=confidence/(c/n)
return support,confidence,lift
ab=metrics({'A'},{'B'})
ba=metrics({'B'},{'A'})
print('A->B',ab)
print('B->A',ba)
assert ab[0]==0.5 and ab[1]==0.75
assert abs(ab[2]-0.9)<1e-12
assert ba[1]==0.6 and abs(ba[2]-ab[2])<1e-12فایل فقط سنجه یک قاعده انتخابشده را حساب میکند؛ الگوریتم جستوجوی همه مجموعههای پرتکرار یا سامانه توصیه کالا نیست. اگر A در هیچ تراکنشی نباشد، confidence قابل محاسبه نیست. اگر نرخ پایه پیامد صفر باشد، lift هم تعریف مناسبی برای تقسیم ندارد؛ کد این حالتها را خطا میدهد، نه صفر ساختگی.
از هموقوعی تا پیشنهاد مرتبط
برای تمرین، یک سبد جدید حاوی فقط B اضافه کنید و ببینید confidence قاعده A→B ثابت میماند ولی نرخ پایه و Lift تغییر میکنند. این تفاوت نشان میدهد چرا گزارش یک درصد بدون مبنا کافی نیست.
پیشنهاد خدمت مکمل درباره گفتوگوی نیازمحور است؛ سنجه همخرید، جای تأیید نیاز و تمایل مخاطب را نمیگیرد. برای انتخاب داده و روش تحلیل هم راهنمای روشهای یادگیری را ببینید. اگر قصد پیگیری تلفنی مرتبط دارید، سناریو و گروه مجاز را در مسیر خدمات اپرا مشخص کنید؛ این مقاله موتور پیشنهاد آماده یا نتیجه فروش اپرا را اعلام نمیکند.
فایل تمرین و منابع
دریافت کد کامل این تمرین؛ این فایل فقط از کتابخانه استاندارد پایتون استفاده میکند. ورودیهای آن ساختگی و برای بازتولید محاسبهاند؛ اجرای آموزشی آن نتیجه یک محصول یا مشتری را نشان نمیدهد.
تاریخ بررسی منابع: ۳ نوامبر ۲۰۲۶. منابع، مرجع روشاند؛ دادهها، اعداد و کد مثال برای همین راهنما طراحی شدهاند.