تبدیل باکس-کاکس Box-Cox یا به عبارتی (Box-Cox Transformation) یک روش آماری است که برای تبدیل دادهها استفاده میشود تا آنها را نرمالتر (نرمال از نظر توزیع) کرده و انحرافات از پیشفرضهای مدلسازی آماری (مانند همسانی واریانس یا نرمال بودن باقیماندهها) را کاهش دهد. این تبدیل میتواند به بهبود عملکرد مدلهای آماری و پیشبینی کمک کند.
تبدیل باکس-کاکس (Box-Cox) یک روش ریاضی برای تبدیل دادهها است که توسط جورج باکس و دیوید کاکس پیشنهاد شد. این تبدیل برای بهبود ویژگیهای آماری دادهها، مانند نرمالسازی توزیع یا همگنسازی واریانس، استفاده میشود. این روش تنها برای دادههای مثبت قابل استفاده است. اگر دادهها شامل مقادیر صفر یا منفی باشند، باید مقدار ثابتی به آنها اضافه شود. همچنین انتخاب مقدار مناسبλ نیازمند روشهای بهینهسازی مانند بیشینه درستنمایی است. تبدیل باکس-کاکس در تحلیلهای رگرسیونی، سریهای زمانی، و آمادهسازی دادهها در یادگیری ماشین کاربرد دارد و ابزاری قدرتمند برای غلبه بر مشکلات آماری رایج است.
این تبدیل به صورت زیر تعریف میشود:
y: متغیر پاسخ (دادهها)
λ: پارامتر تبدیل که تعیین میکند دادهها چگونه تغییر کنند.
نرمالسازی دادهها: برای کاهش چولگی (skewness) در توزیع دادهها.
همگنسازی واریانس: برای برآورد بهتر پیشفرضهای همسانی واریانس (homoscedasticity).
بهبود عملکرد مدلها: در رگرسیون و سایر تکنیکهای مدلسازی.
λ=۱: دادهها بدون تغییر باقی میمانند.
λ=۰: تبدیل لگاریتمی (ln(y)).
λ<۱: دادهها فشردهتر میشوند.
λ>۱: دادهها کشیدهتر میشوند.
آمادهسازی دادهها: دادهها باید مثبت باشند. اگر دادهها منفی یا صفر باشند، معمولاً یک مقدار ثابت به آنها اضافه میشود.
تخمین λ: مقدار بهینه λ معمولاً با استفاده از روش بیشینه درستنمایی (Maximum Likelihood Estimation) به دست میآید.
اعمال تبدیل: با مقدار λ به دست آمده، دادهها تبدیل میشوند.
تحلیلهای رگرسیونی برای اطمینان از پیشفرضهای مدل.
آمادهسازی دادهها در تحلیل سریهای زمانی.
نرمالسازی دادهها در یادگیری ماشین.
انعطافپذیری بالا برای انواع دادهها.
کاهش اثر چولگی و برآورده کردن پیشفرضهای آماری.
محدود به دادههای مثبت.
نیاز به تنظیم و انتخاب مقدار مناسب λ، که گاهی پیچیده است.
برای انجام تبدیل باکس-کاکس میتوان از زبانهای برنامهنویسی مانند پایتون استفاده کرد. کتابخانههایی مانند scipy این تبدیل را پیادهسازی کردهاند. در زیر نمونهای از کدنویسی برای این تبدیل آورده شده است:
import numpy as np
from scipy.stats import boxcox
import matplotlib.pyplot as plt
# دادههای نمونه (باید مثبت باشند)
data = np.array([2.1, 2.5, 3.0, 4.5, 6.7, 8.0, 9.2])
# اعمال تبدیل باکس-کاکس
transformed_data, lambda_value = boxcox(data)
# نمایش نتایج
print(“مقادیر تبدیلشده:”, transformed_data)
print(“مقدار بهینه λ (لامبدا):”, lambda_value)
# مقایسه دادههای اصلی و تبدیلشده
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.hist(data, bins=10, color=’blue’, alpha=0.7, label=’Original Data’)
plt.title(‘Original Data’)
plt.legend()
plt.subplot(1, 2, 2)
plt.hist(transformed_data, bins=10, color=’green’, alpha=0.7, label=’Box-Cox Transformed Data’)
plt.title(‘Box-Cox Transformed Data’)
plt.legend()
plt.tight_layout()
plt.show()