Բոլոր դասերը
AIՍկսնակ12 րոպե ընթերցումԱրժե իմանալ

Մեքենայական ուսուցման հիմունքներ

Ինչպես են համակարգիչները օրինակներից սովորում օրինաչափություններ՝ յուրաքանչյուր AI ֆունկցիայի հիմքում ընկած գաղափարները։

  • Supervised
  • Training vs inference
  • Overfitting
  • Metrics
Քայլ 1/5
Supervised learning-ը սկսվում է պիտակավորված օրինակներից՝ «cat» կամ «dog» նշված լուսանկարներ։ Մի քանիսը փակում են որպես test set։ Չնայե՛ս։

30 վայրկյանում

Մեքենայական ուսուցումը նշանակում է գրել ծրագիր, որը կանոնները սովորում է օրինակներից, այլ ոչ թե մարդն է գրում կանոնները։ Մոդելին ցույց եք տալիս բազմաթիվ մուտքեր՝ ճիշտ պատասխաններով, այն ինքն իրեն կարգավորում է ավելի քիչ սխալվելու համար, և հետո կանխատեսումներ է անում նոր տվյալների վրա։ Մի քանի հիմնական գաղափարի իմացությունը՝ training ընդդեմ inference, overfitting և ճիշտ մետրիկներ, թույլ է տալիս խելամտորեն գնահատել ցանկացած AI ֆունկցիա։

Իմ ամենօրյա stack-ում չէ․ գիտեմ հիմնական գաղափարները և մանրամասները կսովորեմ, երբ նախագիծը դա պահանջի։

Ինչու է սա կարևոր

  • Յուրաքանչյուր AI ֆունկցիա՝ spam ֆիլտրերից մինչև մեծ լեզվական մոդելներ, հենվում է նույն հիմունքների վրա․ դրանք հասկանալը օգնում է ճիշտ հարցեր տալ տվյալների, որակի և ռիսկի մասին։
  • Բիզնես խնդիրներից շատերը՝ churn-ի կանխատեսում, պահանջարկի կանխատեսում, fraud scoring, դեռևս ավելի լավ և էժան են լուծվում աղյուսակային տվյալների վրա դասական ML-ով, քան LLM-ով։
  • Ինժեներներն ավելի ու ավելի հաճախ ինտեգրում են ուրիշների կառուցած մոդելներ․ մետրիկների և ձախողման տեսակների իմացությունը թույլ է տալիս փորձարկել դրանք և հաճախորդներին բացատրել դրանց սահմանները։
  • Թիմին ML պետք է, երբ կանոնները չափազանց բարդ են ձեռքով գրելու համար, բայց կան բազմաթիվ անցյալ օրինակներ՝ հայտնի արդյունքներով։

Ինչպես է աշխատում

01Գաղափարը՝ կանոններ սովորել օրինակներից

Սովորական ծրագրավորման մեջ դուք եք գրում կանոնները՝ եթե email-ը պարունակում է «free money», նշիր որպես spam։ Մեքենայական ուսուցման մեջ տրամադրում եք օրինակներ՝ հազարավոր email-ներ, որոնցից յուրաքանչյուրը նշված է spam կամ ոչ, և ալգորիթմն ինքն է գտնում կանոնները։ Մտածեք, թե ինչպես է երեխան սովորում, թե ինչ է շունը․ ոչ ոք նրան սահմանում չի տալիս, նա տեսնում է բազմաթիվ շներ և ոչ-շներ և ձևավորում ինտուիցիա։ Մոդելը մաթեմատիկական ֆունկցիա է՝ կարգավորվող թվերով, որոնք կոչվում են պարամետրեր (կամ weight-եր)։ Training-ը նշանակում է կարգավորել այդ պարամետրերը այնպես, որ մոդելի ելքերը հնարավորինս մոտ համընկնեն հայտնի պատասխաններին։ Յուրաքանչյուր մուտք նկարագրվում է feature-ներով՝ չափելի հատկություններով, ինչպիսիք են պատվերի գումարը, օրվա ժամը կամ հաճախորդի պատմությունը, իսկ պատասխանը, որը ցանկանում ենք կանխատեսել, label-ն է կամ target-ը։

  • Feature՝ մուտքային հատկություն (գին, բառերի քանակ, պիքսելների արժեքներ)
  • Label / target՝ սովորելու պատասխանը (spam, գին, կատեգորիա)
  • Model՝ ֆունկցիա, որի պարամետրերը կարգավորվում են training-ի ընթացքում

02Ուսուցման տեսակները

Supervised learning-ը օգտագործում է label-ված օրինակներ։ Եթե label-ը կատեգորիա է (spam / ոչ spam, ապրանքի որ կատեգորիա), դա classification է, եթե թիվ է (տան գին, առաքման ժամանակ), դա regression է։ Unsupervised learning-ը label-ներ չունի և ինքնուրույն գտնում է կառուցվածքը՝ հաճախորդներին կլաստերավորում է սեգմենտների, հայտնաբերում անսովոր գործարքներ կամ սեղմում տվյալները։ Reinforcement learning-ը սովորում է փորձի և սխալի միջոցով՝ պարգևներից, ինչպես խաղեր խաղացող agent-ներում և ռոբոտների կառավարման մեջ։ Self-supervised learning-ը label-ներ է ստեղծում հենց տվյալներից, օրինակ՝ թաքցնում է նախադասության հաջորդ բառը և կանխատեսում այն։ Այսպես են մեծ լեզվական մոդելները pre-train արվում հսկայական քանակությամբ տեքստի վրա՝ նախքան մարդկային feedback-ով կատարելագործվելը։ Բիզնես խնդիրների մեծ մասի համար մեկնակետը supervised learning-ն է աղյուսակային տվյալների վրա։

03Training ընդդեմ inference

Training-ը սովորելու փուլն է․ մոդելը տեսնում է օրինակներ, կանխատեսումներ անում, loss function-ով չափում, թե որքան է սխալվում, և հրում իր պարամետրերը այդ loss-ը նվազեցնելու համար՝ սովորաբար gradient descent-ով, որը սխալի մակերևույթի վրա կրկնակի փոքր քայլեր է անում «դեպի ցած»։ Այն հաշվողականորեն ծանր է և տեղի է ունենում ժամանակ առ ժամանակ։ Inference-ը օգտագործման փուլն է․ վարժեցված, այժմ սառեցված մոդելը ստանում է նոր մուտքեր և վերադարձնում կանխատեսումներ։ Այն տեղի է ունենում անընդհատ, production-ում, և պետք է լինի արագ ու էժան։ Այս բաժանումը կարևոր է ինժեներիայի համար․ training-ին պետք են տվյալների pipeline-ներ, փորձեր և հաճախ GPU-ներ, inference-ին պետք են API, մոնիթորինգ և latency-ի բյուջեներ։ Երբ կանչում եք LLM API, inference եք անում մի մոդելի վրա, որը ուրիշն է վարժեցրել։

python
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
 
X, y = load_orders_features()  # features and labels (1 = fraud, 0 = ok)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)
 
model = RandomForestClassifier(n_estimators=300, random_state=42)
model.fit(X_train, y_train)            # training
 
pred = model.predict(X_test)           # inference on unseen data
print(classification_report(y_test, pred))

04Train, validation և test հավաքածուներ

Մոդելը, որը փորձարկվում է նույն տվյալների վրա, որոնցից սովորել է, փայլուն տեսք կունենա և կձախողվի իրական կյանքում՝ ինչպես ուսանողը, որն անգիր է արել անցյալ տարվա քննության պատասխանները։ Ուստի տվյալները բաժանում եք երեք մասի։ Training set-ը սովորելու համար է։ Validation set-ը ձեր կատարած ընտրությունների համար է՝ որ ալգորիթմը, որ կարգավորումները (hyperparameter-ները), որ feature-ները։ Test set-ը կողպված է և օգտագործվում է մեկ անգամ՝ վերջում, իրական աշխարհում արդյունավետությունը ազնվորեն գնահատելու համար։ Տիպիկ բաժանումներն են 70/15/15 կամ 80/10/10։ Cross-validation-ը validation մասը պտտում է մի քանի fold-երով՝ փոքր dataset-ների վրա ավելի կայուն գնահատական ստանալու համար։ Ժամանակից կախված տվյալների համար՝ վաճառքներ, գներ, churn, բաժանեք ըստ ժամանակի՝ train արեք անցյալի վրա, test արեք ապագայի, որովհետև մոդելը հենց այդպես է օգտագործվելու։

05Overfitting և underfitting

Overfitting-ը նշանակում է, որ մոդելը սովորել է training տվյալների աղմուկն ու առանձնահատկությունները՝ ընդհանուր օրինաչափության փոխարեն․ գերազանց training score-եր, վատ score-եր նոր տվյալների վրա։ Underfitting-ը հակառակն է․ մոդելը չափազանց պարզ է օրինաչափությունը որսալու համար և ամենուր վատ է աշխատում։ Պատկերացրեք կետերով կոր անցկացնելը․ ուղիղ գիծը կարող է underfit անել, յուրաքանչյուր կետով անցնող խենթ ալիքավոր գիծը overfit է անում, իսկ հարթ կորը ընդհանրացնում է։ Overfitting-ի նշաններ՝ մեծ տարբերություն training և validation score-երի միջև։ Միջոցներ՝ ավելի շատ և բազմազան տվյալներ, ավելի պարզ մոդել, regularisation (ծայրահեղ պարամետրերի տուգանում), early stopping, dropout նեյրոնային ցանցերում և պատասխանը «արտահոսող» feature-ների հեռացում։ Նպատակը միշտ generalisation-ն է՝ լավ աշխատել տվյալների վրա, որոնք մոդելը երբեք չի տեսել։

  • Բարձր train, ցածր validation score → overfitting
  • Ցածր train և ցածր validation score → underfitting
  • Ուղղել տվյալներով, ավելի պարզ մոդելներով, regularisation-ով, early stopping-ով

06Մետրիկներ՝ ընտրել, թե ինչ է նշանակում «լավ»

Accuracy-ն՝ ճիշտ կանխատեսումների բաժինը, մոլորեցնող է, երբ դասերը անհավասարակշռված են։ Եթե գործարքների 1%-ը fraud է, մոդելը, որը միշտ ասում է «fraud չէ», 99% accurate է և անօգուտ։ Ուստի օգտագործում եք ավելի լավ մետրիկներ։ Precision՝ fraud նշված ամեն ինչից որքանն էր իսկապես fraud։ Recall՝ բոլոր իրական fraud-երից որքանն ենք բռնել։ F1-ը համակցում է երկուսը։ ROC-AUC-ն և PR-AUC-ն չափում են, թե որքան լավ է մոդելը դասակարգում դրականները բացասականներից վեր՝ բոլոր շեմերով։ Regression-ի համար MAE-ն (mean absolute error) հեշտ է բացատրել իրական միավորներով, իսկ RMSE-ն ավելի խիստ է տուգանում մեծ սխալները։ Մետրիկը միշտ կապեք բիզնեսի արժեքի հետ․ fraud-ի դեպքում բաց թողնված fraud-ը կարող է շատ ավելի թանկ արժենալ, քան կեղծ տագնապը, ուստի որոշման շեմը համապատասխանաբար կարգավորում եք՝ հաճախ նախապատվությունը տալով recall-ին։

python
from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score
 
proba = model.predict_proba(X_test)[:, 1]
pred = (proba >= 0.3).astype(int)   # threshold chosen from business costs
 
print("precision", precision_score(y_test, pred))
print("recall   ", recall_score(y_test, pred))
print("f1       ", f1_score(y_test, pred))
print("roc_auc  ", roc_auc_score(y_test, proba))

Օգտագործեք, երբ

  • Արդյունքների կանխատեսում պատմական տվյալներից՝ հայտնի արդյունքներով՝ churn, fraud, պահանջարկ, առաքման ժամանակ։
  • Խնդիրներ, որտեղ ձեռքով գրված կանոնները դառնում են անվերջ բացառություններ, օրինակ՝ spam կամ պատկերների ճանաչում։
  • Ranking և recommendation, որտեղ որակի փոքր աճը կարևոր է միլիոնավոր որոշումների մասշտաբով։
  • Անոմալիաների հայտնաբերում մետրիկներում, log-երում կամ գործարքներում, երբ «նորմալը» ավելի հեշտ է սովորել, քան նկարագրել։

Մի՛ օգտագործեք, երբ

  • Երբ պարզ կանոնները լավ են աշխատում և պետք է լիովին բացատրելի լինեն․ հստակ բիզնես կանոնը գերազանցում է «սև արկղին»։
  • Երբ ունեք շատ քիչ տվյալներ կամ հուսալի label-ներ չունեք և չեք կարող ստանալ։
  • Երբ սխալն անընդունելի է և չի կարող վերանայվել՝ առանց ուժեղ պաշտպանական միջոցների և մարդկային վերահսկողության։

Այլընտրանքներ

  • Կանոններ և heuristic-ներ

    Թափանցիկ են, ակնթարթորեն փոխվում են և հաճախ բավարար են առաջին տարբերակի համար։

  • LLM API-ներ

    Zero-shot classification կամ դուրսբերում prompt-ով, training տվյալներ պետք չեն, մեկ կանչի ավելի բարձր արժեք և latency։

  • Managed AutoML

    Cloud ծառայություններ, որոնք ձեր աղյուսակային տվյալների վրա փորձում են բազմաթիվ մոդելներ․ արագ baseline, ավելի քիչ վերահսկողություն։

  • Վիճակագրություն

    Regression analysis-ը, A/B թեստերը և կանխատեսման պարզ մեթոդները պատասխանում են բազմաթիվ բիզնես հարցերի՝ առանց ML pipeline-ների։

Լավագույն պրակտիկաներ

  1. Deep learning-ից առաջ սկսեք պարզ baseline-ից (կանոններ, logistic regression, gradient boosting)։
  2. Պահեք կողպված test set և ժամանակից կախված տվյալները բաժանեք ըստ ժամանակի։
  3. Ընտրեք մետրիկներ, որոնք արտացոլում են բիզնեսի արժեքը, և որոշման շեմը կարգավորեք բացահայտ։
  4. Ստուգեք data leakage-ը․ ոչ մի feature չպետք է պարունակի տեղեկություն, որը հասանելի չէ կանխատեսման պահին։
  5. Տվյալները, կոդը և մոդելները տարբերակավորեք միասին, որպեսզի ցանկացած արդյունք հնարավոր լինի վերարտադրել։
  6. Մոնիթորինգ արեք production մուտքերն ու կանխատեսումները drift-ի համար և վերավարժեցրեք թարմ տվյալների վրա։
  7. Ստուգեք արդյունավետությունն ըստ ենթախմբերի (տարածաշրջան, սարք, հաճախորդի տեսակ)՝ անարդար կամ կոտրված սեգմենտները բռնելու համար։

Տարածված սխալներ

  • Accuracy հաղորդել անհավասարակշռված dataset-ի վրա։
  • Կարգավորել test set-ի վրա, մինչև լավ տեսք ունենա, ինչը այն վերածում է երկրորդ validation set-ի։
  • Պատահական բաժանումներ time-series տվյալների վրա, ինչը թույլ է տալիս մոդելին «տեսնել ապագան»։
  • Feature-ներ, որոնք արտահոսում են label-ը, օրինակ՝ «refund_processed» դրոշը, որն օգտագործվում է refund-ները կանխատեսելու համար։
  • Deploy անել մեկ անգամ և երբեք մոնիթորինգ չանել, մինչ հաճախորդների վարքը դանդաղ փոխվում է։

Խորը վերլուծություն

07Gradient descent և ինչպես են սովորում նեյրոնային ցանցերը

Training-ը օպտիմալացման խնդիր է։ Loss function-ը «որքան է սխալ մոդելը»-ն վերածում է մեկ թվի՝ cross-entropy classification-ի համար, mean squared error regression-ի համար։ Gradient-ը այն ուղղությունն է, որով loss-ը ամենաարագն է աճում յուրաքանչյուր պարամետրի նկատմամբ, gradient descent-ը պարամետրերը փոքր քայլով տեղափոխում է հակառակ ուղղությամբ։ Քայլի չափը learning rate-ն է․ չափազանց բարձր, և training-ը շեղվում է կամ ցատկոտում, չափազանց ցածր, և այն սողում է։ Գործնականում օգտագործում ենք mini-batch-եր (stochastic gradient descent) և ադապտիվ optimizer-ներ, ինչպիսին է Adam-ը, որոնք քայլի չափը կարգավորում են յուրաքանչյուր պարամետրի համար։ Նեյրոնային ցանցերը gradient-ները հաշվում են բոլոր շերտերով backpropagation-ով՝ chain rule-ի արդյունավետ կիրառմամբ։ Մեծ մոդելներն ավելացնում են հնարքներ՝ learning rate-ի warm-up և decay, normalisation շերտեր, gradient clipping, բայց հիմնական ցիկլը նույնն է՝ կանխատեսել, չափել loss-ը, հաշվել gradient-ները, թարմացնել։

python
import numpy as np
 
# Linear regression y ≈ w*x + b with plain gradient descent
x = np.array([1, 2, 3, 4, 5], dtype=float)
y = np.array([3, 5, 7, 9, 11], dtype=float)   # true: w=2, b=1
w, b, lr = 0.0, 0.0, 0.05
 
for epoch in range(500):
    pred = w * x + b
    err = pred - y
    loss = (err ** 2).mean()
    w -= lr * 2 * (err * x).mean()   # gradient of loss w.r.t. w
    b -= lr * 2 * err.mean()         # gradient of loss w.r.t. b
 
print(round(w, 2), round(b, 2), round(loss, 4))

08Bias–variance փոխզիջում և regularisation

Կանխատեսման սխալն ունի երեք մաս՝ bias (սխալ ենթադրություններից եկող սխալ՝ մոդել, որը չափազանց պարզ է օրինաչափությունը որսալու համար), variance (կոնկրետ training նմուշի նկատմամբ զգայունությունից եկող սխալ՝ այնքան ճկուն մոդել, որ տվյալների փոքր փոփոխություններից շատ է փոխվում) և անկրճատելի աղմուկ։ Պարզ մոդելներն ունեն բարձր bias և ցածր variance, բարդ մոդելները՝ հակառակը։ Regularisation-ը միտումնավոր ավելացնում է մի փոքր bias՝ variance-ը նվազեցնելու համար․ L2-ը (ridge) փոքրացնում է բոլոր weight-երը, L1-ը (lasso) որոշները հրում է ճիշտ զրոյի և ընտրում feature-ներ, ծառային մոդելները սահմանափակում են խորությունը կամ տերևի չափը, իսկ նեյրոնային ցանցերն օգտագործում են weight decay, dropout և early stopping։ Ensemble-ները նույնպես նվազեցնում են variance-ը․ random forest-ները միջինացնում են բազմաթիվ ապակոռելացված ծառեր, իսկ gradient boosting-ը ավելացնում է փոքր ծառեր, որոնք ուղղում են նախորդ սխալները։ Ժամանակակից deep learning-ը բարդացնում է դասական պատկերը՝ շատ մեծ ցանցերը կարող են լավ ընդհանրացնել՝ չնայած հսկայական capacity-ին, բայց ամենօրյա աղյուսակային խնդիրներում այս փոխզիջումը հուսալի ուղեցույց է։

09Data leakage և գնահատման թակարդներ

Leakage-ը ամենատարածված պատճառն է, թե ինչու մոդելը offline հիանալի տեսք ունի և ձախողվում է production-ում։ Target leakage՝ feature-ը կոդավորում է արդյունքը, օրինակ՝ «account_closed_date»-ը churn կանխատեսելիս։ Temporal leakage՝ ամբողջ dataset-ի, ներառյալ ապագայի վրա հաշվված ագրեգատներ, կամ պատահական բաժանումներ ժամանակով դասավորված տվյալների վրա։ Group leakage՝ նույն հաճախորդը կամ պացիենտը հայտնվում է և՛ train, և՛ test set-երում, ուստի մոդելը ճանաչում է անհատներին, ոչ թե օրինաչափությունները․ օգտագործեք խմբերը հաշվի առնող բաժանումներ։ Pre-processing leakage՝ scaling, imputing կամ feature-ների ընտրություն ամբողջ dataset-ի վրա՝ բաժանելուց առաջ․ այս քայլերը fit արեք pipeline-ի ներսում միայն training տվյալների վրա։ Արագ թեստ՝ եթե արդյունավետությունը չափազանց լավ է թվում ճշմարիտ լինելու համար, ուսումնասիրեք feature importance-ը և յուրաքանչյուր լավագույն feature-ի համար հարցրեք՝ «իսկապե՞ս կիմանայի այս արժեքը կանխատեսման պահին»։

python
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GroupKFold, cross_val_score
 
# Scaling is fitted inside each fold -> no pre-processing leakage
pipe = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
 
# Same customer never in both train and validation folds
scores = cross_val_score(pipe, X, y, groups=customer_ids,
                         cv=GroupKFold(n_splits=5), scoring="roc_auc")
print(scores.mean(), scores.std())

10Notebook-ից production (MLOps-ի հիմունքներ)

Notebook-ում մոդելը փորձ է, production-ում մոդելը dependency-ներով ծառայություն է։ Հիմունքներ՝ վերարտադրելի training (տարբերակավորված տվյալների snapshot, կոդի commit, random seed-եր, միջավայր), model registry, որը պահում է artefact-ները իրենց մետրիկներով, և ճիշտ նույն feature-ների տրամաբանությունը training-ում և serving-ում․ այստեղ անհամապատասխանությունները (training–serving skew) դասական լուռ բագ են, որը feature store-երը նպատակ ունեն կանխել։ Մոդելները մատուցեք API-ի կամ batch job-ի հետևում՝ մուտքի վավերացմամբ, latency-ի բյուջեներով և fallback կանոնով։ Մոնիթորինգ արեք երեք շերտ՝ համակարգ (latency, սխալներ), տվյալներ (feature-ների բաշխումներ, բացակայող արժեքներ, drift) և արդյունք (իրական մետրիկներ, երբ label-ները գան)։ Rollout արեք shadow mode-ով կամ canary-ներով, համեմատեք ընթացիկ մոդելի հետ և rollback-ը պահեք պարզ։ Վերավարժեցրեք ըստ ժամանակացույցի կամ trigger-ի և ամեն անգամ նորից ստուգեք արդարությունը և ենթախմբերի արդյունավետությունը։

Իրական իրավիճակներ

01

Fraud մոդել 99% accuracy-ով

Խնդիր

Թիմը հպարտությամբ հաղորդում է նոր fraud մոդելի 99% accuracy։ Fraud-ը գործարքների մոտ 1%-ն է, և վճարումների թիմն ասում է, որ այն գրեթե ոչինչ չի բռնում։

Ինչպես լուծել

Այս անհավասարակշռության դեպքում accuracy-ն անիմաստ է․ «երբեք fraud» պատասխանը 99% է ստանում։ Վերագնահատեք precision-ով, recall-ով և PR-AUC-ով ժամանակի վրա հիմնված test set-ի վրա։ Կառուցեք precision-ի և recall-ի գրաֆիկը տարբեր շեմերով և վճարումների թիմի հետ ընտրեք մեկը՝ ելնելով արժեքներից՝ միջին fraud կորուստ ընդդեմ ձեռքով ստուգման արժեքի։ Եթե recall-ը ցածր է, training-ի ժամանակ օգտագործեք class weight-եր կամ resampling։ Արդյունքները հաղորդեք ըստ merchant-ի տեսակի և գումարի միջակայքի։ Production-ում բարձր score ունեցող գործարքներն ուղարկեք ստուգման՝ ավտոմատ արգելափակելու փոխարեն, և ստուգման արդյունքները հետ սնուցեք որպես թարմ label-ներ։

02

Offline հիանալի, production-ում վատ

Խնդիր

Churn մոդելը offline ստացել էր 0.93 ROC-AUC, բայց գործարկումից հետո նրա կանխատեսումները հազիվ էին գերազանցում պատահականին։ Ակնհայտ ոչինչ չէր փոխվել։

Ինչպես լուծել

Նախ կասկածեք leakage-ի և skew-ի։ Թվարկեք լավագույն feature-ները և ստուգեք, արդյոք յուրաքանչյուրը հայտնի է կանխատեսման պահին․ «cancellation_reason» կամ churn-ից հետո ակտիվության դաշտը կարմիր դրոշ է։ Ստուգեք, որ բաժանումը եղել է ըստ ժամանակի, ոչ թե պատահական, և որ նույն հաճախորդները չեն եղել երկու հավաքածուներում։ Համեմատեք feature-ների բաշխումները training տվյալների և կենդանի մուտքերի միջև․ տարբերությունները հաճախ գալիս են նրանից, որ serving կոդը feature-ները այլ կերպ է հաշվում։ Վերակառուցեք ժամանակի վրա հիմնված բաժանմամբ և ընդհանուր feature pipeline-ով, հետո վավերացրեք shadow mode-ում՝ նախքան անցնելը։

03

Ticket-ների routing-ի համար ML է պետք, թե՞ LLM

Խնդիր

Support թիմն ուզում է ticket-ներն ավտոմատ ուղարկել 12 հերթերից մեկին։ Նրանք ունեն 40,000 պատմական ticket, որոնք արդեն route են արվել օպերատորների կողմից։

Ինչպես լուծել

Բազմաթիվ label-ված տվյալների և label-ների ֆիքսված հավաքածուի դեպքում դասական տեքստային classifier-ը (TF-IDF գումարած logistic regression կամ փոքր fine-tuned մոդել) ուժեղ, էժան baseline է՝ միլիվայրկյանային inference-ով։ Համեմատեք այն առանձնացված, ժամանակի վրա հիմնված test set-ի վրա LLM prompt-ի հետ, որն ունի հերթերի նկարագրությունները և մի քանի օրինակ։ Չափեք accuracy-ն ըստ հերթի և յուրաքանչյուր սխալ route-ի արժեքը։ Հաճախ դասական մոդելը էժանորեն կարգավորում է հիմնական զանգվածը, իսկ ցածր վստահությամբ ticket-ները կարգավորում է LLM-ը կամ մարդը։ Նոր պրոդուկտների գործարկման ժամանակ մոնիթորինգ արեք drift-ը։

Արագ ուղեցույց

Տեղադրել դասական ML toolkit-ը
pip install scikit-learn pandas numpy
Stratified train/test բաժանում
train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
Ժամանակով դասավորված cross-validation
from sklearn.model_selection import TimeSeriesSplit
Առանց leakage-ի preprocessing
make_pipeline(StandardScaler(), LogisticRegression())
Precision
TP / (TP + FP)
Recall
TP / (TP + FN)
F1 score
2 · precision · recall / (precision + recall)
Ամբողջական classification report
print(classification_report(y_test, pred))
Overfitting-ի ստուգում
համեմատեք train score-ը validation score-ի հետ․ մեծ տարբերություն = overfit

Հարցեր և պատասխաններ

Q1Ո՞րն է տարբերությունը AI-ի, machine learning-ի և deep learning-ի միջև։

AI-ը համակարգիչներին այնպիսի առաջադրանքներ կատարել տալու լայն նպատակն է, որոնք կարծես ինտելեկտ են պահանջում․ այն ներառում է նաև կանոնների վրա հիմնված համակարգեր։ Machine learning-ը այն ենթաբազմությունն է, որտեղ համակարգերը օրինաչափություններ են սովորում տվյալներից՝ ձեռքով գրված կանոններին հետևելու փոխարեն։ Deep learning-ը ML-ի ենթաբազմություն է, որն օգտագործում է բազմաշերտ նեյրոնային ցանցեր, որոնք գերազանցում են պատկերների, աուդիոյի և տեքստի հարցում։ Մեծ լեզվական մոդելները deep learning մոդելներ են՝ վարժեցված հսկայական քանակությամբ տեքստի վրա։ Աղյուսականման տվյալների վրա տիպիկ բիզնես խնդրի համար դասական ML-ը, օրինակ՝ gradient boosting-ը, հաճախ դեռ լավագույն ընտրությունն է։

Q2Ի՞նչ է overfitting-ը և ինչպե՞ս կանխել այն։

Overfitting-ը այն է, երբ մոդելը անգիր է անում training տվյալները՝ ներառյալ դրանց աղմուկը, և չի կարողանում ընդհանրացնել նոր տվյալների վրա։ Նկատում եք դա, երբ training score-երը շատ ավելի լավն են, քան validation score-երը։ Կանխելու համար՝ ստացեք ավելի շատ և բազմազան տվյալներ, օգտագործեք ավելի պարզ մոդել կամ ավելի քիչ feature-ներ, կիրառեք regularisation, օգտագործեք early stopping, երբ validation արդյունավետությունը դադարում է բարելավվել, նեյրոնային ցանցերի համար օգտագործեք dropout կամ data augmentation և գնահատեք cross-validation-ով։ Ստուգեք նաև leakage-ը, քանի որ չափազանց լավ թվացող մոդելը հաճախ «խաբում է» պատասխանը պարունակող feature-ի միջոցով։

Q3Precision, թե՞ recall․ որն է ավելի կարևոր։

Կախված է յուրաքանչյուր սխալի արժեքից։ Precision-ը պատասխանում է՝ երբ մոդելն ասում է «այո», որքան հաճախ է ճիշտ։ Recall-ը պատասխանում է՝ բոլոր իրական դրականներից քանիսն ենք գտել։ Spam ֆիլտրի համար բարձր precision-ն է կարևոր, որովհետև իրական email թաքցնելը թանկ է։ Fraud-ի հայտնաբերման կամ քաղցկեղի սքրինինգի համար հաճախ recall-ն է ավելի կարևոր, որովհետև դեպքը բաց թողնելը թանկ է, իսկ կեղծ տագնապները մարդը կարող է վերանայել։ Նրանց միջև շարժվում եք որոշման շեմը փոխելով, ուստի ընտրեք այն շահագրգիռ կողմերի հետ՝ ելնելով իրական արժեքներից, և հաղորդեք երկու թվերն էլ։

Q4Ինչու՞ է մեզ պետք առանձին test set։

Յուրաքանչյուր որոշում, որ կայացնում եք տվյալներին նայելիս՝ feature-ների, մոդելների կամ hyperparameter-ների ընտրություն, մի փոքր հարմարեցնում է ձեր ընտրությունները այդ տվյալներին։ Եթե վերջնական արդյունավետությունը չափում եք նույն տվյալների վրա, գնահատականը լավատեսական է։ Test set-ը, որը երբեք չի օգտագործվել որևէ որոշման համար, ազնիվ գնահատական է տալիս, թե ինչպես կաշխատի մոդելը նոր տվյալների վրա։ Validation set-ը ընտրություններ կատարելու համար է, test set-ը՝ վերջնական հաշվետվության։ Եթե շարունակում եք ստուգել test set-ը և կարգավորել, այն դադարում է test set լինել, և ձեզ պետք են թարմ տվյալներ։

Q5Ո՞րն է տարբերությունը training-ի և inference-ի միջև։

Training-ը այն է, երբ մոդելը սովորում է․ մշակում է label-ված օրինակներ, loss function-ով չափում իր սխալը և թարմացնում պարամետրերը՝ հաճախ ժամերով կամ օրերով մասնագիտացված hardware-ի վրա։ Inference-ը այն է, երբ վարժեցված մոդելն օգտագործվում է․ ստանում է նոր մուտքեր և վերադարձնում կանխատեսումներ՝ սովորաբար միլիվայրկյաններում, production-ում վայրկյանում բազմաթիվ անգամներ։ Training-ի արժեքը վճարվում է ժամանակ առ ժամանակ, inference-ինը՝ յուրաքանչյուր հարցման ժամանակ։ Ահա թե ինչու production-ի մտահոգությունները՝ latency, throughput, մոնիթորինգ և մեկ կանխատեսման արժեք, կենտրոնանում են inference-ի վրա։

Q6Ի՞նչ է data drift-ը։

Data drift-ը այն է, երբ production-ում մոդելի տեսած տվյալները փոխվում են training տվյալների համեմատ։ Feature-ների բաշխումները կարող են շեղվել՝ նոր հաճախորդների սեգմենտներ, հավելվածի նոր տարբերակ, սեզոնայնություն, կամ կարող է փոխվել feature-ների և արդյունքների միջև կապը, ինչը կոչվում է concept drift, օրինակ՝ երբ խարդախները փոխում են մարտավարությունը։ Այդ դեպքում արդյունավետությունը լուռ նվազում է։ Դա մշակում եք՝ մոնիթորինգ անելով մուտքերի բաշխումները և կանխատեսումների հաճախականությունը, կանխատեսումները համեմատելով իրական արդյունքների հետ, երբ label-ները գալիս են, դնելով alert-ներ և վերավարժեցնելով պարբերաբար կամ drift հայտնաբերելիս։

Սենիոր մակարդակի հարցեր

S1Ինչպե՞ս մոդելը prototype-ից կհասցնեիք հուսալի production ծառայության։

Նախ training-ը դարձրեք վերարտադրելի՝ տարբերակավորված տվյալների snapshot, pin արված միջավայր, seed-եր և pipeline, որը մեկ հրամանով ստեղծում է մոդելը և դրա գնահատման հաշվետվությունը։ Artefact-ը պահեք registry-ում՝ մետրիկներով և տվյալների տարբերակով։ Feature-ները իրականացրեք մեկ անգամ և կիսեք training-ի և serving-ի միջև՝ skew-ից խուսափելու համար։ Մատուցեք API-ի հետևում՝ մուտքի վավերացմամբ, timeout-ներով և կանոնների վրա հիմնված fallback-ով, կամ որպես batch job, եթե real-time պետք չէ․ batch-ը շատ ավելի պարզ է։ Release արեք shadow mode-ում, համեմատեք ընթացիկ մոտեցման հետ, հետո canary։ Մոնիթորինգ արեք latency-ն և սխալները, մուտքերի drift-ը և իրական արդյունքները, երբ label-ները գան։ Սահմանեք վերավարժեցման trigger-ներ և պատասխանատու։ Փոխզիջումը ջանքն է․ ամբողջական MLOps stack-ը մեկ մոդելի համար չափազանց է, սկսեք script-ներից, registry-ից և լավ մոնիթորինգից, և գործիքներ ավելացրեք, երբ մոդելները բազմանան։

S2Դասական ML, fine-tuned փոքր մոդել, թե՞ LLM prompting․ ինչպե՞ս եք ընտրում։

Համեմատում եմ դրանք նույն առանձնացված տվյալների վրա, բայց մի քանի գործնական կանոն ուղղորդում են կարճ ցուցակը։ Աղյուսակային տվյալներ՝ լավ label-ներով՝ gradient boosting-ը գրեթե միշտ հաղթում է արժեքով, latency-ով և accuracy-ով։ Տեքստային առաջադրանքներ՝ label-ների ֆիքսված հավաքածուով և հազարավոր label-ներով՝ դասական կամ փոքր fine-tuned classifier-ը էժան և արագ է մեծ ծավալի դեպքում։ Քիչ label-ներ կամ ընդհանրապես չկան, բազմաթիվ կատեգորիաներ կամ առաջադրանքներ, որոնք պահանջում են մտածողություն և աշխարհի մասին գիտելիք՝ LLM prompting-ը արդյունք է տալիս արագ և կարող է label-ներ գեներացնել՝ հետագայում ավելի փոքր մոդել bootstrap անելու համար։ Կշռեք նաև latency-ն, մեկ միլիոն կանխատեսման արժեքը, տվյալների գաղտնիությունը, բացատրելիությունը և սպասարկումը․ prompt-ները հեշտ է փոխել, բայց մեկ կանչի արժեքը աճում է ծավալի հետ։ Hybrid կարգավորումները տարածված են՝ էժան մոդելը կարգավորում է վստահ դեպքերը, իսկ մնացածը՝ LLM-ը կամ մարդը։

S3Ինչպե՞ս եք հայտնաբերում և մշակում մոդելի անարդար վարքը։

Սկսեք սահմանելով այն խմբերը, որոնք իրավական և էթիկական առումով կարևոր են պրոդուկտի համար, և արդյոք կարող եք դրանք չափել։ Հետո գնահատեք ըստ խմբի՝ սխալների տոկոսներ, false positive և false negative տոկոսներ և calibration, ոչ թե միայն ընդհանուր accuracy։ Փնտրեք պատճառները՝ training տվյալներում թերներկայացվածություն, կողմնակալ պատմական label-ներ կամ proxy feature-ներ, օրինակ՝ փոստային ինդեքսը, որը փոխարինում է պաշտպանված հատկանիշներին։ Մեղմացման միջոցներից են ավելի լավ տվյալների հավաքումը, reweighting-ը, proxy feature-ների հեռացումը կամ սահմանափակումը, շեմերի վերանայումն ըստ խմբի և սահմանային որոշումների մարդկային ստուգումը։ Արդարության տարբեր սահմանումներ կարող են հակասել իրար, ուստի ընտրությունը պրոդուկտային և իրավական որոշում է, որը փաստագրվում է շահագրգիռ կողմերի հետ։ Կրկնեք վերլուծությունը յուրաքանչյուր վերավարժեցման ժամանակ և մոնիթորինգ արեք production-ում, որովհետև drift-ը կարող է նոր անհավասարություններ առաջացնել։

Բառարան

Feature
Չափելի մուտքային հատկություն, որը մոդելն օգտագործում է, օրինակ՝ գին, տարիք կամ բառերի քանակ։
Label
Training օրինակի ճիշտ պատասխանը, որը մոդելը սովորում է կանխատեսել։
Parameters (weights)
Մոդելի ներսում գտնվող թվերը, որոնք training-ը կարգավորում է սխալները նվազեցնելու համար։
Loss function
Բանաձև, որը չափում է, թե որքան սխալ են մոդելի կանխատեսումները․ training-ը փորձում է այն նվազագույնի հասցնել։
Hyperparameter
Training-ից առաջ ընտրված կարգավորում, օրինակ՝ ծառի խորությունը կամ learning rate-ը, որը կարգավորվում է validation տվյալների վրա։
Overfitting
Երբ մոդելը անգիր է անում training տվյալները և վատ է աշխատում նոր, չտեսնված տվյալների վրա։
Inference
Վարժեցված մոդելի օգտագործում նոր մուտքերի վրա կանխատեսումներ անելու համար։
Data leakage
Երբ training տվյալները ներառում են տեղեկություն, որը հասանելի չէր լինի կանխատեսման պահին։
Drift
Production տվյալների կամ կապերի փոփոխություններ ժամանակի ընթացքում, որոնք մոդելը դարձնում են պակաս ճշգրիտ։

Պրոդուկտի գաղափար ունե՞ք։Եկեք ստեղծենք այն։

Պատմեք ձեր գաղափարի, պրոդուկտի կամ թիմի մասին։ Սովորաբար պատասխանում եմ մեկ աշխատանքային օրվա ընթացքում։