Xarajat, xavfsizlik va qonun
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:
- Pul qayerga ketyapti?
- Ma'lumot xavfsizmi?
- 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.
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)') "
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.
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)"}, ]))
| Xavf | Nima bo'ladi | Qayerda ko'rilgan |
|---|---|---|
| Model fayli — bu kod | pickle yuklash kod bajaradi | 26-bob |
| Xususiyatda shaxsiy ma'lumot | Telefon, manzil modelga tushadi | Shu bob |
| Bashorat orqali ma'lumot sizishi | Model o'qitish ma'lumotini oshkor qiladi | Shu bob |
| Model o'g'irlanishi | Ko'p so'rov bilan model nusxalanadi | 30-bob (cheklov) |
| Ma'lumotni zaharlash | Manbaga soxta yozuv kiritiladi | 6-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.
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.') "
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?
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.') "
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:
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?"}, ]))
| Savol | Nega muhim |
|---|---|
| Shaxsiy ma'lumot nima | Telefon, manzil, pasport — model xususiyatiga tushishi mumkin |
| Ma'lumot qayerda saqlanadi | Lokalizatsiya talabi bo'lishi mumkin — bulut tanlashga ta'sir qiladi |
| Rozilik olinganmi | Foydalanuvchi ma'lumoti qanday maqsadda ishlatilishi aytilganmi |
| Qancha saqlanadi | 5-bobdagi manifest va Iceberg snapshotlari ham ma'lumot saqlaydi |
| O'chirish so'ralsa | Model 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:
- Qaysi ma'lumot shaxsiy hisoblanadi?
- Uni qayerda saqlash mumkin?
- 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
- O'z loyihangiz uchun xarajatni hisoblang: o'qitish va xizmat ulushi qanday?
- Model xususiyatlaringizni ko'rib chiqing. Qaysilari xom shaxsiy ma'lumot? Ularni hisoblangan belgiga aylantiring.
min_samples_leafni 1, 3, 10, 30 qilib yodlash farqini o'lchang. Qaysi nuqtada yo'qoladi?- Jurnalingizda (
servis.log) shaxsiy ma'lumot bormi? Tekshiring. - 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.