|
2 weeks ago | |
---|---|---|
.. | ||
solution | 3 weeks ago | |
working | 3 weeks ago | |
README.md | 2 weeks ago | |
assignment.md | 3 weeks ago |
README.md
وقت کی سیریز کی پیش گوئی ARIMA کے ساتھ
پچھلے سبق میں، آپ نے وقت کی سیریز کی پیش گوئی کے بارے میں کچھ سیکھا اور ایک ڈیٹا سیٹ لوڈ کیا جو ایک وقت کے عرصے میں بجلی کے لوڈ میں اتار چڑھاؤ کو ظاہر کرتا ہے۔
🎥 اوپر دی گئی تصویر پر کلک کریں ایک ویڈیو کے لیے: ARIMA ماڈلز کا مختصر تعارف۔ مثال R میں کی گئی ہے، لیکن تصورات عالمی ہیں۔
سبق سے پہلے کا کوئز
تعارف
اس سبق میں، آپ ایک خاص طریقہ دریافت کریں گے جس کے ذریعے ماڈلز کو ARIMA: AutoRegressive Integrated Moving Average کے ساتھ بنایا جا سکتا ہے۔ ARIMA ماڈلز خاص طور پر ایسے ڈیٹا کے لیے موزوں ہیں جو غیر مستحکم رجحانات ظاہر کرتا ہے۔
عمومی تصورات
ARIMA کے ساتھ کام کرنے کے لیے، آپ کو کچھ بنیادی تصورات کے بارے میں جاننا ضروری ہے:
-
🎓 مستحکمی۔ شماریاتی سیاق و سباق میں، مستحکمی اس ڈیٹا کو کہتے ہیں جس کی تقسیم وقت کے ساتھ تبدیل نہیں ہوتی۔ غیر مستحکم ڈیٹا ایسے اتار چڑھاؤ ظاہر کرتا ہے جو رجحانات کی وجہ سے ہوتے ہیں اور تجزیہ کے لیے اسے تبدیل کرنا ضروری ہوتا ہے۔ مثال کے طور پر، موسمی رجحانات ڈیٹا میں اتار چڑھاؤ پیدا کر سکتے ہیں، جنہیں 'موسمی فرق' کے عمل سے ختم کیا جا سکتا ہے۔
-
🎓 فرق لینا۔ شماریاتی سیاق و سباق میں، فرق لینا غیر مستحکم ڈیٹا کو مستحکم بنانے کے عمل کو کہتے ہیں، جس میں غیر مستقل رجحان کو ختم کیا جاتا ہے۔ "فرق لینا وقت کی سیریز کی سطح میں تبدیلیوں کو ختم کرتا ہے، رجحان اور موسمی اثرات کو ختم کرتا ہے اور نتیجتاً وقت کی سیریز کے اوسط کو مستحکم کرتا ہے۔" Shixiong et al کا مقالہ
وقت کی سیریز کے سیاق و سباق میں ARIMA
آئیے ARIMA کے اجزاء کو کھول کر دیکھتے ہیں تاکہ یہ سمجھ سکیں کہ یہ وقت کی سیریز کو ماڈل کرنے اور اس کے خلاف پیش گوئی کرنے میں کیسے مدد کرتا ہے۔
-
AR - آٹو ریگریسیو کے لیے۔ آٹو ریگریسیو ماڈلز، جیسا کہ نام سے ظاہر ہے، وقت میں 'پیچھے' دیکھتے ہیں تاکہ آپ کے ڈیٹا میں پچھلی قدروں کا تجزیہ کریں اور ان کے بارے میں مفروضے بنائیں۔ ان پچھلی قدروں کو 'لیگز' کہا جاتا ہے۔ مثال کے طور پر، وہ ڈیٹا جو پنسلوں کی ماہانہ فروخت کو ظاہر کرتا ہے۔ ہر مہینے کی فروخت کا کل ڈیٹا سیٹ میں ایک 'ارتقائی متغیر' سمجھا جائے گا۔ یہ ماڈل اس طرح بنایا جاتا ہے کہ "دلچسپی کا ارتقائی متغیر اپنی ہی پچھلی (یعنی، سابقہ) قدروں پر ریگریس کیا جاتا ہے۔" ویکیپیڈیا
-
I - انٹیگریٹڈ کے لیے۔ ARMA ماڈلز کے برعکس، ARIMA میں 'I' اس کے انٹیگریٹڈ پہلو کی طرف اشارہ کرتا ہے۔ ڈیٹا کو 'انٹیگریٹ' کیا جاتا ہے جب فرق لینے کے اقدامات غیر مستحکمی کو ختم کرنے کے لیے لاگو کیے جاتے ہیں۔
-
MA - موونگ ایوریج کے لیے۔ اس ماڈل کا موونگ ایوریج پہلو اس آؤٹ پٹ متغیر کی طرف اشارہ کرتا ہے جو لیگز کی موجودہ اور پچھلی قدروں کو دیکھ کر طے کیا جاتا ہے۔
خلاصہ: ARIMA وقت کی سیریز کے ڈیٹا کی خاص شکل کو زیادہ سے زیادہ قریب سے فٹ کرنے کے لیے استعمال کیا جاتا ہے۔
مشق - ARIMA ماڈل بنائیں
اس سبق کے /working فولڈر کو کھولیں اور notebook.ipynb فائل تلاش کریں۔
-
نوٹ بک کو چلائیں تاکہ
statsmodels
Python لائبریری لوڈ ہو؛ آپ کو ARIMA ماڈلز کے لیے اس کی ضرورت ہوگی۔ -
ضروری لائبریریاں لوڈ کریں۔
-
اب، ڈیٹا کو پلاٹ کرنے کے لیے مزید لائبریریاں لوڈ کریں:
import os import warnings import matplotlib.pyplot as plt import numpy as np import pandas as pd import datetime as dt import math from pandas.plotting import autocorrelation_plot from statsmodels.tsa.statespace.sarimax import SARIMAX from sklearn.preprocessing import MinMaxScaler from common.utils import load_data, mape from IPython.display import Image %matplotlib inline pd.options.display.float_format = '{:,.2f}'.format np.set_printoptions(precision=2) warnings.filterwarnings("ignore") # specify to ignore warning messages
-
/data/energy.csv
فائل سے ڈیٹا کو ایک Pandas ڈیٹا فریم میں لوڈ کریں اور دیکھیں:energy = load_data('./data')[['load']] energy.head(10)
-
جنوری 2012 سے دسمبر 2014 تک دستیاب تمام توانائی کے ڈیٹا کو پلاٹ کریں۔ اس میں کوئی حیرت نہیں ہونی چاہیے کیونکہ ہم نے یہ ڈیٹا پچھلے سبق میں دیکھا تھا:
energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) plt.xlabel('timestamp', fontsize=12) plt.ylabel('load', fontsize=12) plt.show()
اب، آئیے ایک ماڈل بناتے ہیں!
تربیتی اور جانچ کے ڈیٹا سیٹس بنائیں
اب آپ کا ڈیٹا لوڈ ہو چکا ہے، لہذا آپ اسے تربیتی اور جانچ کے سیٹس میں تقسیم کر سکتے ہیں۔ آپ اپنے ماڈل کو تربیتی سیٹ پر تربیت دیں گے۔ حسب معمول، ماڈل کی تربیت مکمل ہونے کے بعد، آپ اس کی درستگی کا اندازہ جانچ کے سیٹ کا استعمال کرتے ہوئے کریں گے۔ آپ کو یہ یقینی بنانا ہوگا کہ جانچ کا سیٹ تربیتی سیٹ کے بعد کے وقت کے عرصے کا احاطہ کرتا ہے تاکہ ماڈل مستقبل کے وقت کے عرصے سے معلومات حاصل نہ کرے۔
-
ستمبر 1 سے اکتوبر 31، 2014 تک کے دو ماہ کے عرصے کو تربیتی سیٹ کے لیے مختص کریں۔ جانچ کا سیٹ نومبر 1 سے دسمبر 31، 2014 کے دو ماہ کے عرصے پر مشتمل ہوگا:
train_start_dt = '2014-11-01 00:00:00' test_start_dt = '2014-12-30 00:00:00'
چونکہ یہ ڈیٹا توانائی کے روزانہ استعمال کو ظاہر کرتا ہے، اس میں ایک مضبوط موسمی نمونہ موجود ہے، لیکن حالیہ دنوں کے استعمال کے ساتھ سب سے زیادہ مشابہت ہے۔
-
فرق کو بصری طور پر دیکھیں:
energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) plt.xlabel('timestamp', fontsize=12) plt.ylabel('load', fontsize=12) plt.show()
لہذا، ڈیٹا کو تربیت دینے کے لیے وقت کی ایک نسبتاً چھوٹی ونڈو کا استعمال کافی ہونا چاہیے۔
نوٹ: چونکہ ہم ARIMA ماڈل کو فٹ کرنے کے لیے استعمال ہونے والے فنکشن میں تربیت کے دوران اندرونی نمونہ کی توثیق کا استعمال کرتے ہیں، ہم توثیقی ڈیٹا کو چھوڑ دیں گے۔
تربیت کے لیے ڈیٹا تیار کریں
اب، آپ کو ڈیٹا کو تربیت کے لیے تیار کرنے کی ضرورت ہے، جس میں فلٹرنگ اور اسکیلنگ شامل ہے۔ اپنے ڈیٹا سیٹ کو صرف ان وقت کے عرصوں اور کالموں تک محدود کریں جن کی آپ کو ضرورت ہے، اور اسکیلنگ کو یقینی بنائیں کہ ڈیٹا 0 اور 1 کے وقفے میں پیش کیا گیا ہے۔
-
اصل ڈیٹا سیٹ کو فلٹر کریں تاکہ صرف مذکورہ وقت کے عرصے اور صرف مطلوبہ کالم 'لوڈ' اور تاریخ شامل ہوں:
train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] test = energy.copy()[energy.index >= test_start_dt][['load']] print('Training data shape: ', train.shape) print('Test data shape: ', test.shape)
آپ ڈیٹا کی شکل دیکھ سکتے ہیں:
Training data shape: (1416, 1) Test data shape: (48, 1)
-
ڈیٹا کو (0, 1) کی حد میں اسکیل کریں۔
scaler = MinMaxScaler() train['load'] = scaler.fit_transform(train) train.head(10)
-
اصل بمقابلہ اسکیل شدہ ڈیٹا کو بصری طور پر دیکھیں:
energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) plt.show()
اصل ڈیٹا
اسکیل شدہ ڈیٹا
-
اب جب کہ آپ نے اسکیل شدہ ڈیٹا کو کیلیبریٹ کر لیا ہے، آپ جانچ کے ڈیٹا کو اسکیل کر سکتے ہیں:
test['load'] = scaler.transform(test) test.head()
ARIMA کو نافذ کریں
اب وقت آ گیا ہے کہ ARIMA کو نافذ کریں! آپ اس کے لیے پہلے سے انسٹال کردہ statsmodels
لائبریری کا استعمال کریں گے۔
اب آپ کو کئی مراحل پر عمل کرنے کی ضرورت ہے:
- ماڈل کو
SARIMAX()
کال کر کے اور ماڈل کے پیرامیٹرز: p، d، اور q پیرامیٹرز، اور P، D، اور Q پیرامیٹرز پاس کر کے ڈیفائن کریں۔ - تربیتی ڈیٹا کے لیے ماڈل کو تیار کریں
fit()
فنکشن کو کال کر کے۔ - پیش گوئی کرنے کے لیے
forecast()
فنکشن کو کال کریں اور پیش گوئی کے لیے قدموں کی تعداد (یعنیhorizon
) کو مخصوص کریں۔
🎓 یہ تمام پیرامیٹرز کس لیے ہیں؟ ARIMA ماڈل میں 3 پیرامیٹرز ہوتے ہیں جو وقت کی سیریز کے اہم پہلوؤں کو ماڈل کرنے میں مدد کرتے ہیں: موسمی رجحان، رجحان، اور شور۔ یہ پیرامیٹرز ہیں:
p
: ماڈل کے آٹو ریگریسیو پہلو سے وابستہ پیرامیٹر، جو ماضی کی قدروں کو شامل کرتا ہے۔
d
: ماڈل کے انٹیگریٹڈ حصے سے وابستہ پیرامیٹر، جو وقت کی سیریز پر فرق لینے کی مقدار کو متاثر کرتا ہے۔
q
: ماڈل کے موونگ ایوریج حصے سے وابستہ پیرامیٹر۔
نوٹ: اگر آپ کے ڈیٹا میں موسمی پہلو موجود ہو - جیسا کہ اس ڈیٹا میں ہے - تو ہم موسمی ARIMA ماڈل (SARIMA) استعمال کرتے ہیں۔ اس صورت میں آپ کو ایک اور سیٹ کے پیرامیٹرز استعمال کرنے کی ضرورت ہوگی:
P
،D
، اورQ
جوp
،d
، اورq
کے جیسے ہی تعلقات کو بیان کرتے ہیں، لیکن ماڈل کے موسمی اجزاء سے متعلق ہیں۔
-
اپنے پسندیدہ افق کی قیمت مقرر کریں۔ آئیے 3 گھنٹے آزماتے ہیں:
# Specify the number of steps to forecast ahead HORIZON = 3 print('Forecasting horizon:', HORIZON, 'hours')
ARIMA ماڈل کے پیرامیٹرز کے لیے بہترین قدروں کا انتخاب کرنا چیلنجنگ ہو سکتا ہے کیونکہ یہ کسی حد تک موضوعی اور وقت طلب ہے۔ آپ
pyramid
لائبریری کےauto_arima()
فنکشن پر غور کر سکتے ہیں۔ -
فی الحال کچھ دستی انتخاب آزمائیں تاکہ ایک اچھا ماڈل تلاش کیا جا سکے۔
order = (4, 1, 0) seasonal_order = (1, 1, 0, 24) model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) results = model.fit() print(results.summary())
نتائج کی ایک جدول پرنٹ کی گئی ہے۔
آپ نے اپنا پہلا ماڈل بنا لیا ہے! اب ہمیں اسے جانچنے کا ایک طریقہ تلاش کرنے کی ضرورت ہے۔
اپنے ماڈل کا جائزہ لیں
اپنے ماڈل کا جائزہ لینے کے لیے، آپ نام نہاد walk forward
توثیق انجام دے سکتے ہیں۔ عملی طور پر، وقت کی سیریز کے ماڈلز کو ہر بار جب نیا ڈیٹا دستیاب ہوتا ہے دوبارہ تربیت دی جاتی ہے۔ یہ ماڈل کو ہر وقت کے قدم پر بہترین پیش گوئی کرنے کی اجازت دیتا ہے۔
اس تکنیک کا استعمال کرتے ہوئے وقت کی سیریز کے آغاز سے شروع کریں، تربیتی ڈیٹا سیٹ پر ماڈل کو تربیت دیں۔ پھر اگلے وقت کے قدم پر پیش گوئی کریں۔ پیش گوئی کو معلوم قدر کے خلاف جانچا جاتا ہے۔ تربیتی سیٹ کو معلوم قدر شامل کرنے کے لیے بڑھایا جاتا ہے اور یہ عمل دہرایا جاتا ہے۔
نوٹ: آپ کو تربیتی سیٹ کی ونڈو کو زیادہ موثر تربیت کے لیے مقررہ رکھنا چاہیے تاکہ ہر بار جب آپ تربیتی سیٹ میں ایک نیا مشاہدہ شامل کریں، آپ سیٹ کے آغاز سے مشاہدہ ہٹا دیں۔
یہ عمل اس بات کا زیادہ مضبوط تخمینہ فراہم کرتا ہے کہ ماڈل عملی طور پر کیسا کارکردگی دکھائے گا۔ تاہم، اس میں اتنے زیادہ ماڈلز بنانے کی کمپیوٹیشنل لاگت آتی ہے۔ اگر ڈیٹا چھوٹا ہو یا ماڈل سادہ ہو تو یہ قابل قبول ہے، لیکن بڑے پیمانے پر یہ مسئلہ بن سکتا ہے۔
walk-forward
توثیق وقت کی سیریز کے ماڈلز کے جائزے کا سنہری معیار ہے اور آپ کے اپنے منصوبوں کے لیے تجویز کیا جاتا ہے۔
-
سب سے پہلے، ہر HORIZON قدم کے لیے ایک ٹیسٹ ڈیٹا پوائنٹ بنائیں۔
test_shifted = test.copy() for t in range(1, HORIZON+1): test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') test_shifted = test_shifted.dropna(how='any') test_shifted.head(5)
load load+1 load+2 2014-12-30 00:00:00 0.33 0.29 0.27 2014-12-30 01:00:00 0.29 0.27 0.27 2014-12-30 02:00:00 0.27 0.27 0.30 2014-12-30 03:00:00 0.27 0.30 0.41 2014-12-30 04:00:00 0.30 0.41 0.57 ڈیٹا کو اس کے افق کے نقطہ کے مطابق افقی طور پر منتقل کیا گیا ہے۔
-
اپنے ٹیسٹ ڈیٹا پر اس سلائیڈنگ ونڈو اپروچ کا استعمال کرتے ہوئے پیش گوئیاں کریں، ٹیسٹ ڈیٹا کی لمبائی کے سائز کے ایک لوپ میں:
%%time training_window = 720 # dedicate 30 days (720 hours) for training train_ts = train['load'] test_ts = test_shifted history = [x for x in train_ts] history = history[(-training_window):] predictions = list() order = (2, 1, 0) seasonal_order = (1, 1, 0, 24) for t in range(test_ts.shape[0]): model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) model_fit = model.fit() yhat = model_fit.forecast(steps = HORIZON) predictions.append(yhat) obs = list(test_ts.iloc[t]) # move the training window history.append(obs[0]) history.pop(0) print(test_ts.index[t]) print(t+1, ': predicted =', yhat, 'expected =', obs)
آپ تربیت کو دیکھ سکتے ہیں:
2014-12-30 00:00:00 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] 2014-12-30 01:00:00 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] 2014-12-30 02:00:00 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795]
-
پیش گوئیوں کا اصل لوڈ کے ساتھ موازنہ کریں:
eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) eval_df.head()
آؤٹ پٹ
timestamp h prediction actual 0 2014-12-30 00:00:00 t+1 3,008.74 3,023.00 1 2014-12-30 01:00:00 t+1 2,955.53 2,935.00 2 2014-12-30 02:00:00 t+1 2,900.17 2,899.00 3 2014-12-30 03:00:00 t+1 2,917.69 2,886.00 4 2014-12-30 04:00:00 t+1 2,946.99 2,963.00 گھنٹہ وار ڈیٹا کی پیش گوئی کو اصل لوڈ کے ساتھ ملاحظہ کریں۔ یہ کتنا درست ہے؟
ماڈل کی درستگی چیک کریں
اپنے ماڈل کی درستگی کو چیک کریں، تمام پیش گوئیوں پر اس کی اوسط مطلق فیصد غلطی (MAPE) کی جانچ کر کے۔
🧮 ریاضی دیکھیں
MAPE پیش گوئی کی درستگی کو ایک تناسب کے طور پر ظاہر کرنے کے لیے استعمال کیا جاتا ہے، جو اوپر دیے گئے فارمولے سے بیان کیا گیا ہے۔ اصل اور پیش گوئی کے درمیان فرق کو اصل سے تقسیم کیا جاتا ہے۔ "اس حساب میں مطلق قدر کو وقت کے ہر پیش گوئی شدہ نقطے کے لیے جمع کیا جاتا ہے اور فٹ کیے گئے نقاط کی تعداد n سے تقسیم کیا جاتا ہے۔" ویکیپیڈیا
-
کوڈ میں مساوات ظاہر کریں:
if(HORIZON > 1): eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] print(eval_df.groupby('h')['APE'].mean())
-
ایک قدم کے MAPE کا حساب لگائیں:
print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%')
ایک قدم کی پیش گوئی کا MAPE: 0.5570581332313952 %
-
کثیر قدم کی پیش گوئی کا MAPE پرنٹ کریں:
print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%')
Multi-step forecast MAPE: 1.1460048657704118 %
ایک اچھا کم نمبر بہترین ہے: غور کریں کہ اگر پیش گوئی کا MAPE 10 ہو تو یہ 10% سے غلط ہے۔
-
لیکن ہمیشہ کی طرح، اس قسم کی درستگی کی پیمائش کو بصری طور پر دیکھنا آسان ہے، تو آئیے اسے پلاٹ کرتے ہیں:
if(HORIZON == 1): ## Plotting single step forecast eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) else: ## Plotting multi step forecast plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] for t in range(1, HORIZON+1): plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values fig = plt.figure(figsize=(15, 8)) ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) ax = fig.add_subplot(111) for t in range(1, HORIZON+1): x = plot_df['timestamp'][(t-1):] y = plot_df['t+'+str(t)][0:len(x)] ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) ax.legend(loc='best') plt.xlabel('timestamp', fontsize=12) plt.ylabel('load', fontsize=12) plt.show()
🏆 ایک بہت اچھا پلاٹ، جو ایک ماڈل کو اچھی درستگی کے ساتھ دکھاتا ہے۔ شاباش!
🚀چیلنج
وقت کی سیریز ماڈل کی درستگی کو جانچنے کے مختلف طریقوں پر غور کریں۔ ہم نے اس سبق میں MAPE پر بات کی ہے، لیکن کیا آپ دوسرے طریقے استعمال کر سکتے ہیں؟ ان پر تحقیق کریں اور ان کا تجزیہ کریں۔ ایک مددگار دستاویز یہاں دستیاب ہے۔
لیکچر کے بعد کا کوئز
جائزہ اور خود مطالعہ
یہ سبق ARIMA کے ساتھ وقت کی سیریز کی پیش گوئی کے صرف بنیادی اصولوں پر بات کرتا ہے۔ اپنے علم کو گہرا کرنے کے لیے کچھ وقت نکالیں اور اس ریپوزٹری اور اس کے مختلف ماڈل اقسام کو دیکھیں تاکہ وقت کی سیریز کے ماڈل بنانے کے دوسرے طریقے سیکھ سکیں۔
اسائنمنٹ
ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔