Asosiy qismga o'tish

Xarajat, xavfsizlik va qonun

37-bob 5 kod bloki 1602 so'z

Bu bobdagi kod shu fayllar bilan ishlaydio'z kompyuteringizda ishga tushiring

Oy oxirida kelgan hisob

Model ishlayapti. Monitoring yashil. Drift yo'q. Hamma narsa joyida.

Oy oxirida bulut hisobi keladi va u kutganingizdan uch barobar katta.

Qayerdan? Bilmaysiz. Hisobda o'nlab qator bor: hisoblash, saqlash, tarmoq, ma'lumotlar bazasi. Qaysi biri model uchun, qaysi biri boshqa narsa uchun — ajratilmagan.

Bu bob uchta savolga javob beradi va ular bir-biriga bog'liq:

  1. Pul qayerga ketyapti?
  2. Ma'lumot xavfsizmi?
  3. Qonun nima deydi?

Uchalasi ham odatda oxirida o'ylanadi. Va uchalasi ham oxirida o'ylanganda qimmatga tushadi.

Pul qayerga ketadi

Yangi boshlovchilar odatda o'qitishni qimmat deb o'ylaydi. Ko'p holatda bu noto'g'ri.

O'qitish kamdan-kam bo'ladi: haftada bir, oyda bir. Xizmat esa to'xtovsiz ishlaydi: sekundiga o'nlab so'rov, yilning 365 kuni.

Hisoblab ko'ramiz.

python30 qator
python3 -c "
# Oddiy VPS narxlari (taxminiy, 2026)
SOATLIK_KICHIK = 0.02   # 2 yadro, 4 GB
SOATLIK_KATTA  = 0.15   # 8 yadro, 32 GB

# 24-bobdan: oqitish vaqti
OQITISH_DAQIQA = 3
OQITISH_HAFTADA = 1

# 29-bobdan: servis 400 sorov/s uddalaydi
SOROV_SEKUNDIGA = 50      # real yuk
SERVERLAR = 2             # zaxira bilan

oqitish_oylik = (OQITISH_DAQIQA/60) * OQITISH_HAFTADA * 4.3 * SOATLIK_KATTA
xizmat_oylik  = 24 * 30 * SOATLIK_KICHIK * SERVERLAR

n1 = 'Oqitish (oyiga 4 marta)'
n2 = 'Xizmat (2 server, 24/7)'
n3 = 'JAMI'
print(f'{n1:32s} \${oqitish_oylik:>8.2f}')
print(f'{n2:32s} \${xizmat_oylik:>8.2f}')
print('-' * 44)
print(f'{n3:32s} \${oqitish_oylik + xizmat_oylik:>8.2f}')
print()
print(f'xizmat ulushi: {xizmat_oylik/(oqitish_oylik+xizmat_oylik)*100:.1f}%')
print()
oylik_sorov = SOROV_SEKUNDIGA * 3600 * 24 * 30
print(f'oylik sorovlar: {oylik_sorov:,}')
print(f'bitta bashorat narxi: \${(oqitish_oylik+xizmat_oylik)/oylik_sorov*1000:.6f} (1000 tasi)')
"
Chiqish (qaytish kodi 0, 12 ms)
Oqitish (oyiga 4 marta)          $    0.03
Xizmat (2 server, 24/7)          $   28.80
--------------------------------------------
JAMI                             $   28.83

xizmat ulushi: 99.9%

oylik sorovlar: 129,600,000
bitta bashorat narxi: $0.000222 (1000 tasi)

Raqamlarga qarang: o'qitish deyarli bepul, xizmat esa hisobning deyarli hammasi.

Xulosa amaliy: tejash kerak bo'lsa, xizmat tomoniga qarang. 26-bobdagi ONNX, 29-bobdagi to'plam — ular shu yerda pulga aylanadi.

GPU — eng ko'p isrof qilinadigan resurs

"ML — demak GPU kerak" degan fikr keng tarqalgan va ko'pincha noto'g'ri.

GPU chuqur o'rganish (neyron tarmoq, LLM) uchun kerak. Bizning RandomForest esa GPU ni umuman ishlatmaydi — u protsessorda ishlaydi.

Bundan tashqari GPU bo'sh turganda ham pul yeydi. Soatiga $1 lik GPU oyiga $720 — va agar u faqat haftada 3 daqiqa ishlasa, sarflangan pulning 99.9% havoga ketadi.

Qoida: GPU faqat o'lchangan ehtiyoj bo'lsa. Avval protsessorda ishlating va vaqtni o'lchang (29-bob). Sekin bo'lsa — keyin o'ylang.

ML ga xos xavfsizlik xavflari

Oddiy veb-xavfsizlik (SQL injection, XSS, parol) bu kitobning mavzusi emas — ular har loyihada bir xil.

ML o'ziga xos xavflar qo'shadi va ular kamroq ma'lum.

python13 qator
import pandas as pd
show(pd.DataFrame([
    {"Xavf": "Model fayli — bu kod", "Nima bo'ladi": "pickle yuklash kod bajaradi",
     "Qayerda ko'rilgan": "26-bob"},
    {"Xavf": "Xususiyatda shaxsiy ma'lumot", "Nima bo'ladi": "Telefon, manzil modelga tushadi",
     "Qayerda ko'rilgan": "Shu bob"},
    {"Xavf": "Bashorat orqali ma'lumot sizishi", "Nima bo'ladi": "Model o'qitish ma'lumotini oshkor qiladi",
     "Qayerda ko'rilgan": "Shu bob"},
    {"Xavf": "Model o'g'irlanishi", "Nima bo'ladi": "Ko'p so'rov bilan model nusxalanadi",
     "Qayerda ko'rilgan": "30-bob (cheklov)"},
    {"Xavf": "Ma'lumotni zaharlash", "Nima bo'ladi": "Manbaga soxta yozuv kiritiladi",
     "Qayerda ko'rilgan": "6-bob (sifat)"},
]))
XavfNima bo'ladiQayerda ko'rilgan
Model fayli — bu kodpickle yuklash kod bajaradi26-bob
Xususiyatda shaxsiy ma'lumotTelefon, manzil modelga tushadiShu bob
Bashorat orqali ma'lumot sizishiModel o'qitish ma'lumotini oshkor qiladiShu bob
Model o'g'irlanishiKo'p so'rov bilan model nusxalanadi30-bob (cheklov)
Ma'lumotni zaharlashManbaga soxta yozuv kiritiladi6-bob (sifat)

Ikkinchi va uchinchisi eng ko'p e'tibordan chetda qoladi. Ularni ko'rib chiqamiz.

Xususiyatdagi shaxsiy ma'lumot

Bizning modelda telefon_takrorlanishi bor — telefon raqami nechta e'londa uchragani.

Diqqat qiling: bu raqamning o'zi emas, balki undan hisoblangan son.

Farq juda muhim.

python23 qator
python3 -c "
import pandas as pd
import hashlib

# XAVFLI: raqamning ozi xususiyat sifatida
xavfli = pd.DataFrame({
    'telefon': ['901234567', '907654321', '901234567'],
    'broker': [1, 0, 1],
})

# XAVFSIZ: raqamdan HISOBLANGAN belgi
xavfsiz = xavfli.copy()
xavfsiz['telefon_takrorlanishi'] = xavfsiz.groupby('telefon')['telefon'].transform('size')
xavfsiz = xavfsiz.drop(columns=['telefon'])

print('XAVFLI (raqam modelda):')
print(xavfli.to_string(index=False))
print()
print('XAVFSIZ (faqat hisoblangan belgi):')
print(xavfsiz.to_string(index=False))
print()
print('Ikkinchisida telefon raqami YO\\'Q, lekin signal SAQLANGAN.')
"
Chiqish (qaytish kodi 0, 241 ms)
XAVFLI (raqam modelda):
  telefon  broker
901234567       1
907654321       0
901234567       1

XAVFSIZ (faqat hisoblangan belgi):
 broker  telefon_takrorlanishi
      1                      2
      0                      1
      1                      2

Ikkinchisida telefon raqami YO'Q, lekin signal SAQLANGAN.

Nima o'zgardi? Model uchun hech narsa — u baribir "bu telefon ko'p takrorlangan" signalini oladi.

Sizning uchun esa hammasi o'zgardi: model faylida, jurnallarda, zaxira nusxalarda endi telefon raqami yo'q.

Xususiyat tanlashda savol

Har yangi xususiyat uchun bitta savol bering:

Bu ustun sizib ketsa, kimdir zarar ko'radimi?

Telefon raqami — ha. "Telefon nechta e'londa uchragan" — yo'q.

Manzil — ha. "Markazgacha masofa" — yo'q.

Tug'ilgan sana — ha. "Yosh guruhi" — deyarli yo'q.

Ko'p holatda modelga xom ma'lumot emas, undan hisoblangan belgi kerak. Bu ham xavfsizroq, ham ko'pincha modelga foydaliroq.

Bashorat orqali sizish

Nozikroq xavf. Model o'qitish ma'lumotini eslab qolishi va javoblari orqali oshkor qilishi mumkin.

Bizning modelda buni tekshiramiz: o'qitishda ishtirok etgan va etmagan qatorlarda ishonch farq qiladimi?

python26 qator
python3 -c "
import sys; sys.path.insert(0, 'src')
import numpy as np, pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from quvur.xususiyat import tayyorla

d = pd.read_csv('../datasets/ijara.csv')
x, y = tayyorla(d), d['broker']
Xtr, Xte, ytr, yte = train_test_split(x, y, test_size=0.25, stratify=y, random_state=42)

# 1) NORMAL model (chegaralangan)
m1 = RandomForestClassifier(n_estimators=150, min_samples_leaf=3, random_state=42, n_jobs=1).fit(Xtr, ytr)
# 2) YODLOVCHI model (chegarasiz)
m2 = RandomForestClassifier(n_estimators=150, min_samples_leaf=1, max_depth=None, random_state=42, n_jobs=1).fit(Xtr, ytr)

def ishonch(m, X):
    p = m.predict_proba(X)
    return float(np.mean(np.max(p, axis=1)))

for nom, m in (('chegaralangan (barg>=3)', m1), ('yodlovchi (barg=1)', m2)):
    a, b = ishonch(m, Xtr), ishonch(m, Xte)
    print(f'{nom:26s} oqitishda {a:.4f} | yangida {b:.4f} | farq {a-b:+.4f}')
print()
print('Farq katta bolsa - model YODLAB olgan, va bu sizish xavfi.')
"
Chiqish (qaytish kodi 0, 3320 ms)
chegaralangan (barg>=3)    oqitishda 0.8996 | yangida 0.8834 | farq +0.0162
yodlovchi (barg=1)         oqitishda 0.9361 | yangida 0.8814 | farq +0.0547

Farq katta bolsa - model YODLAB olgan, va bu sizish xavfi.

Farqga qarang. Yodlovchi model o'qitish ma'lumotida ancha ishonchli — u javoblarni eslab qolgan.

Nega bu xavfli? Chunki hujumchi ko'p so'rov yuborib, qaysi yozuvlar o'qitishda qatnashganini taxmin qila oladi. Tibbiy yoki moliyaviy ma'lumotda bu jiddiy muammo.

Yechim — model murakkabligini cheklash (min_samples_leaf), ya'ni 22-bobdagi tajribada sodda-barg20 eng yaxshi natija bergani tasodif emas edi.

O'zbekiston qonuni: nimani bilish kerak

Bu qism yuridik maslahat emas. Men huquqshunos emasman va qonun matni o'zgaradi. Quyidagilar — loyiha boshlashdan oldin so'rash kerak bo'lgan savollar.

O'zbekistonda shaxsiy ma'lumotlar to'g'risidagi qonun amal qiladi. Uning ML loyihalariga tegishli asosiy jihatlari:

python8 qator
import pandas as pd
show(pd.DataFrame([
    {"Savol": "Shaxsiy ma'lumot nima", "Nega muhim": "Telefon, manzil, pasport — model xususiyatiga tushishi mumkin"},
    {"Savol": "Ma'lumot qayerda saqlanadi", "Nega muhim": "Lokalizatsiya talabi bo'lishi mumkin — bulut tanlashga ta'sir qiladi"},
    {"Savol": "Rozilik olinganmi", "Nega muhim": "Foydalanuvchi ma'lumoti qanday maqsadda ishlatilishi aytilganmi"},
    {"Savol": "Qancha saqlanadi", "Nega muhim": "5-bobdagi manifest va Iceberg snapshotlari ham ma'lumot saqlaydi"},
    {"Savol": "O'chirish so'ralsa", "Nega muhim": "Model o'qitish to'plamidan ham o'chirilishi kerakmi?"},
]))
SavolNega muhim
Shaxsiy ma'lumot nimaTelefon, manzil, pasport — model xususiyatiga tushishi mumkin
Ma'lumot qayerda saqlanadiLokalizatsiya talabi bo'lishi mumkin — bulut tanlashga ta'sir qiladi
Rozilik olinganmiFoydalanuvchi ma'lumoti qanday maqsadda ishlatilishi aytilganmi
Qancha saqlanadi5-bobdagi manifest va Iceberg snapshotlari ham ma'lumot saqlaydi
O'chirish so'ralsaModel o'qitish to'plamidan ham o'chirilishi kerakmi?

Oxirgi ikkitasi MLOps uchun ayniqsa noqulay.

Saqlash muddati. 5-bobda ma'lumot versiyalash qurdik, 15-bobda Iceberg time travel. Ikkalasi ham eski ma'lumotni saqlab qoladi — bu texnik jihatdan foydali, lekin huquqiy jihatdan savol tug'diradi.

O'chirish talabi. Foydalanuvchi ma'lumotini o'chirishni so'rasa, uni bazadan o'chirasiz. Lekin u o'qitish to'plamida ham bor. Va modelning o'zida — bilvosita.

Bu savolga universal javob yo'q. Amaliy yondashuv: shaxsiy ma'lumotni modelga umuman kiritmaslik (yuqoridagi hisoblangan belgilar usuli). Unda o'chirish talabi model qatlamiga yetib bormaydi.

Bulut tanlash — texnik emas, huquqiy qaror bo'lishi mumkin

Agar lokalizatsiya talabi bo'lsa, ma'lumot mamlakat ichida saqlanishi kerak bo'ladi.

Bu MLOps uchun jiddiy: sizning modelingiz, jurnallaringiz va zaxira nusxalaringiz ham ma'lumot. Chet eldagi serverda MLflow ishlatayotgan bo'lsangiz, o'qitish ma'lumoti metama'lumoti ham o'sha yerda.

Loyiha boshlashdan oldin aniqlang:

  1. Qaysi ma'lumot shaxsiy hisoblanadi?
  2. Uni qayerda saqlash mumkin?
  3. Model artefaktlari va jurnallar ham shu talabga tushadimi?

Javoblarni huquqshunosdan oling, texnik blogdan emas. Va loyiha hujjatiga yozib qo'ying — ikki yildan keyin hech kim eslamaydi.

Xarajat va xavfsizlik bir-biriga bog'liq

Oxirida bir narsani ta'kidlash kerak: bu ikki mavzu bir-biridan ajralmaydi.

  • Kamroq ma'lumot saqlasangiz — arzonroq va xavfsizroq;
  • Soddaroq model — tez (29-bob), arzon va kamroq yodlaydi;
  • Jurnalga kamroq yozsangiz — arzon va shaxsiy ma'lumot sizish xavfi kam.

Ya'ni ko'p holatda bitta qaror ikkala muammoni ham yaxshilaydi.

Xulosa

Tushuncha Asosiy fikr
Xarajat taqsimoti O'qitish arzon, xizmat qimmat
Tejash joyi Xizmat tomoni: ONNX (26), to'plam (29)
GPU Faqat o'lchangan ehtiyoj bo'lsa; bo'sh turganda ham pul yeydi
ML xavflari pickle, shaxsiy ma'lumot, sizish, o'g'irlash, zaharlash
Xom ma'lumot Modelga hisoblangan belgi bering, raqamning o'zini emas
Xususiyat savoli "Bu sizib ketsa, kimdir zarar ko'radimi?"
Yodlash Chegarasiz model o'qitish ma'lumotini eslab qoladi
Qonun Huquqshunosdan so'rang; texnik blogdan emas
Saqlash va o'chirish Versiyalash va time travel huquqiy savol tug'diradi
Bog'liqlik Kamroq ma'lumot = arzonroq va xavfsizroq

Talaba ishi

  1. O'z loyihangiz uchun xarajatni hisoblang: o'qitish va xizmat ulushi qanday?
  2. Model xususiyatlaringizni ko'rib chiqing. Qaysilari xom shaxsiy ma'lumot? Ularni hisoblangan belgiga aylantiring.
  3. min_samples_leaf ni 1, 3, 10, 30 qilib yodlash farqini o'lchang. Qaysi nuqtada yo'qoladi?
  4. Jurnalingizda (servis.log) shaxsiy ma'lumot bormi? Tekshiring.
  5. Loyihangizda "foydalanuvchi o'chirishni so'radi" holatini yozib chiqing: qaysi tizimlardan o'chirish kerak?

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar