Pilot va shartnoma: "ishlaydi" ni qanday isbotlash
Bu bobning kodi: kod/26_pilot.py — kitob papkasidan ishga tushiring: python kod/26_pilot.py
Mijoz tizimni birdaniga sotib olmaydi. Avval pilot bo'ladi: mijoz maydonida, mijoz kameralarida, cheklangan muddatli sinov. Pilotning maqsadi — oldindan kelishilgan mezonlar bo'yicha "qabul qilinadi" yoki "yo'q" degan qaror. Mezonlarsiz pilot bahs bilan tugaydi: siz "yaxshi ishladi" deysiz, prorab esa bitta soxta signalni eslaydi.
Bu bobda kitobdagi o'lchovlarni qabul mezonlariga aylantiramiz, kichik namuna nega aldashini ko'ramiz, pilot qancha katta bo'lishi kerakligini hisoblaymiz va shartnomaga nima yozilishini sanaymiz.
Pilotdan oldin
Pilot maydonga borishdan oldin boshlanadi. Har bir savol kitobda allaqachon o'lchangan — endi uni mijozning sharoitida takrorlash kerak:
| Savol | Qayerda o'lchadik | Pilotdan oldin |
|---|---|---|
| Piksellar yetadimi (kaska ~24 px) | 17-bob | har kamerada eng uzoq ish joyidagi odamni piksellarda o'lchash |
| Oqim barqarormi, kechikish qancha | 19-bob | bir kun oqimni yozib olish: uzilishlar va kechikish |
| Server nechta kamerani ko'taradi | 25-bob | mijoz kameralari bilan yuklama sinovi |
| Huquqiy tayyorgarlik | 24-bob | ichki tartib, xodimlar imzosi, rollar, saqlash muddati |
| Litsenziya | 23-bob | AGPL, Enterprise yoki Apache yo'li tanlangan |
Kichik namuna aldaydi
22-bobda 2 soniyalik tasdiq bilan 6 ta signal oldik: 3 ta to'g'ri, 2 ta soxta, 1 tasini tekshirib bo'lmadi. Aniqlik 3/5 = 60%. Bu raqam qanchalik ishonchli? Ulush uchun 95% ishonch oralig'ini hisoblaymiz. Wilson usuli kichik namunada ham to'g'ri ishlaydi — oddiy "p ± 2 standart xato" formulasi 5 ta kuzatuvda ma'nosiz oraliq beradi (3/5 uchun yuqori chegarasi 100% dan oshib ketadi).
import math from pathlib import Path import pandas as pd def wilson(k, n, z=1.96): """k/n ulushning 95% ishonch oralig'i (Wilson).""" if n == 0: return 0.0, 1.0 p = k / n markaz = (p + z * z / (2 * n)) / (1 + z * z / n) yarim = z * math.sqrt(p * (1 - p) / n + z * z / (4 * n * n)) / (1 + z * z / n) return markaz - yarim, markaz + yarim NATIJA_22 = [("signal aniqligi, 2 s tasdiq", 3, 5), ("kaskasiz treklar topildi, 2 s tasdiq", 3, 4), ("kaskasizlar topildi, har kadr", 7, 9), ("kaskalilar 'kaskasiz' deb chiqdi, har kadr", 9, 128)] show(pd.DataFrame([{"ko'rsatkich (22-bob)": nom, "k / n": f"{k} / {n}", "natija": f"{k / n:.0%}", "95% oraliq": "{:.0%} – {:.0%}".format(*wilson(k, n))} for nom, k, n in NATIJA_22]))
| ko'rsatkich (22-bob) | k / n | natija | 95% oraliq |
|---|---|---|---|
| signal aniqligi, 2 s tasdiq | 3 / 5 | 60% | 23% – 88% |
| kaskasiz treklar topildi, 2 s tasdiq | 3 / 4 | 75% | 30% – 95% |
| kaskasizlar topildi, har kadr | 7 / 9 | 78% | 45% – 94% |
| kaskalilar 'kaskasiz' deb chiqdi, har kadr | 9 / 128 | 7% | 4% – 13% |
Signal aniqligi 60% emas, balki "qayerdadir 23% bilan 88% orasida". Bunday oraliq bilan tizimni na "yaxshi", na "yomon" deb bo'ladi. 128 ta kaskali odamda esa oraliq tor — ko'p kuzatuv aniq javob beradi. Xulosa: 22-bobdagi video usulni ko'rsatish uchun yetarli, qaror qilish uchun — yo'q. Qarorni faqat yetarlicha katta pilot beradi.
Pilot qancha katta bo'lishi kerak
Qabul qoidasini shunday qo'yamiz: ishonch oralig'ining pastki chegarasi talabdan yuqori bo'lsa — o'tdi. Shunda omadli kichik namuna tizimni "o'tkazib" yubormaydi. Savol: tizimning haqiqiy aniqligi p bo'lsa, buni isbotlash uchun nechta baholangan signal kerak?
def kerakli_namuna(p, talab): """Haqiqiy ulush p bo'lsa, oraliqning pastki chegarasi talabdan oshishi uchun eng kichik n.""" if p <= talab: return None return next(n for n in range(1, 100_000) if wilson(round(p * n), n)[0] >= talab) show(pd.DataFrame([{"haqiqiy aniqlik": f"{p:.0%}", **{f"talab {t:.0%}": kerakli_namuna(p, t) or "—" for t in (0.6, 0.7, 0.8)}} for p in (0.8, 0.9, 0.95)]))
| haqiqiy aniqlik | talab 60% | talab 70% | talab 80% |
|---|---|---|---|
| 80% | 22 | 77 | — |
| 90% | 11 | 15 | 54 |
| 95% | 6 | 9 | 25 |
Masalan, haqiqiy aniqlik 90% bo'lsa, "≥ 70%" ni isbotlash uchun 15 ta, "≥ 80%" uchun esa 54 ta baholangan signal kerak; haqiqiy aniqlik 80% bo'lsa, "≥ 70%" uchun — 77 ta. Talab haqiqiy qiymatga qanchalik yaqin bo'lsa, shuncha ko'p kuzatuv kerak. Talab haqiqiy qiymatdan yuqori bo'lsa ("—"), tizim hech qachon o'tmaydi — talab tizimning o'lchangan imkoniyatidan kelib chiqib qo'yilishi kerak, orzudan emas. Pilot muddatini shu jadvaldan hisoblang: birinchi haftada kuniga nechta signal kelishini ko'ring va kerakli n ga bo'ling.
Xuddi shu hisob topish (recall) uchun ham to'g'ri, faqat u yerda n — signal emas, qo'lda topilgan buzilishlar soni. Ularni topish qimmatroq: videoni odam ko'rib chiqishi kerak.
Pilot bosqichlari
- Yozib olish va birgalikda belgilash. Bir necha kunlik videodan tasodifiy qirqimlar olinadi va mijozning mehnat muhofazasi xodimi bilan birga belgilanadi (16- va 22-boblardagi usul). "Noaniq" holatlar qoidasi oldindan yoziladi: 22-bobdagidek, bosh ko'rinmasa — noaniq, hisobga kirmaydi.
- Sozlash — faqat birinchi qismda. Tasdiq oynasi va ulush (22-bob) belgilangan ma'lumotning birinchi yarmida tanlanadi. Ikkinchi yarmi — sinov, unda hech narsa o'zgartirilmaydi. Sinov ma'lumotiga moslashtirilgan natija o'zini aldash (7-bob).
- Ishlash. Har bir signal baholanadi: to'g'ri, soxta yoki noaniq — bu aniqlik uchun. Topish uchun tasodifiy vaqt oraliqlari qo'lda ko'riladi: signal kelmagan buzilishni faqat shunday topish mumkin. Oraliqlar tasodifiy tanlanadi — "qiziq" paytlarni tanlash natijani buzadi.
- Hisobot. Har hafta — oraliq hisobot, oxirida — qabul hisoboti.
Qabul hisoboti
Hisobot har bir mezon uchun uch holatdan birini beradi: o'tdi (oraliqning pastki chegarasi talabdan yuqori), o'tmadi (yuqori chegarasi talabdan past) va aniq emas — namuna qaror uchun kichik. Vaqt mezonlari uchun eng yomon o'lchov olinadi. Misol sifatida kitobdagi haqiqiy o'lchovlarni beramiz: signallar — 22-bobdan, kamera jimligi — 20-bobdan, yiqilishdan tiklanish — 21-bobdan. Talablar — misol; ular mijoz bilan kelishiladi.
def qabul_hisoboti(ulushlar, vaqtlar): """ulushlar: {mezon: (k, n, talab)} — ulush talabdan yuqori bo'lsin; vaqtlar: {mezon: (o'lchovlar, talab soniyada)} — eng yomon o'lchov talabdan past bo'lsin.""" satrlar = [] for nom, (k, n, talab) in ulushlar.items(): past, yuqori = wilson(k, n) holat = "o'tdi" if past >= talab else "o'tmadi" if yuqori < talab else "aniq emas: namuna kichik" satrlar.append({"mezon": nom, "talab": f"≥ {talab:.0%}", "natija": f"{k}/{n} = {k / n:.0%}", "95% oraliq": f"{past:.0%} – {yuqori:.0%}", "holat": holat}) for nom, (qiymatlar, talab) in vaqtlar.items(): eng = max(qiymatlar) satrlar.append({"mezon": nom, "talab": f"≤ {talab} s", "natija": f"eng yomoni {eng} s ({len(qiymatlar)} ta)", "95% oraliq": "", "holat": "o'tdi" if eng <= talab else "o'tmadi"}) return pd.DataFrame(satrlar) hisobot = qabul_hisoboti( {"signal aniqligi": (3, 5, 0.7), "kaskasizlarni topish": (3, 4, 0.7)}, {"kadr → Telegram": ([1.19, 1.19, 0.21, 0.66, 0.45, 0.17, 1.09, 0.69], 5), # 22-bob, butun tizim "kamera jimligi signali": ([13.0, 13.1], 30), # 20-bob, qotishdan keyin "yiqilgandan keyin tiklanish": ([2.2], 60)}) # 21-bob, web jarayoni Path("out/pilot").mkdir(parents=True, exist_ok=True) hisobot.to_csv("out/pilot/qabul_hisoboti.csv", index=False) show(hisobot)
| mezon | talab | natija | 95% oraliq | holat |
|---|---|---|---|---|
| signal aniqligi | ≥ 70% | 3/5 = 60% | 23% – 88% | aniq emas: namuna kichik |
| kaskasizlarni topish | ≥ 70% | 3/4 = 75% | 30% – 95% | aniq emas: namuna kichik |
| kadr → Telegram | ≤ 5 s | eng yomoni 1.19 s (8 ta) | o'tdi | |
| kamera jimligi signali | ≤ 30 s | eng yomoni 13.1 s (2 ta) | o'tdi | |
| yiqilgandan keyin tiklanish | ≤ 60 s | eng yomoni 2.2 s (1 ta) | o'tdi |
Tezlik va ishonchlilik mezonlari o'tdi, lekin bu yerda ular ham bir-ikki o'lchov: pilotda har birini ko'p marta takrorlang (masalan, kamerani o'n marta uzib ko'ring) — ular tizimning o'zi haqida, shuning uchun takrorlash arzon. Sifat mezonlari esa "aniq emas": ularni faqat mijoz maydonidagi yetarlicha katta namuna hal qiladi. Pilotning asosiy ishi aynan shu.
Shartnomada nima yoziladi
Quyidagi ro'yxat — shartnomada javobi bo'lishi kerak bo'lgan savollar. Yuridik matnni yurist yozadi, raqamlar va texnik mazmunni esa siz berasiz — va ular o'lchovga tayanishi kerak.
- Predmet. Tizim nima qiladi va nima qilmaydi: kaskasiz odam haqida signal beradi; yuzni tanimaydi (24-bob); hech kimni avtomatik jazolamaydi — signal "tekshiring" degani (22-bob). MK 359 dagi nazorat majburiyati ish beruvchida qoladi: tizim uni bajarishga yordam beradi, o'rnini bosmaydi.
- Qabul. Mezonlar, talablar, namuna hajmi, qaror qoidasi (bu bob), kim belgilaydi va kelishmovchilikda kim hal qiladi.
- Xizmat darajasi. Ishlash vaqti va nosozlikka javob muddati; kim nima uchun javob beradi: elektr, internet va kameralar ko'pincha mijozda, server va dastur — sizda. O'lchangan imkoniyatlarni bering: kamera jimligi ~13 s da aniqlanadi (20-bob), dastur yiqilsa 2.2 s da tiklanadi, zaxiradan tiklash sinalgan (21-bob).
- Ma'lumotlar (24-bob). Mulkdor va operator kim; maqsad; nima saqlanadi va qancha vaqt; qayerda (O'zbekiston); kim ko'radi; uchinchi shaxsga berish; shartnoma tugaganda ma'lumot qaytariladimi yoki yo'q qilinadimi (qonunning 17-moddasi).
- Litsenziya (23-bob). Tanlangan yo'l va uchinchi tomon komponentlari ro'yxati (
out/litsenziyalar/*.csv). - Narx (25-bob). Model, to'lov bosqichlari (masalan, bir qismi — qabuldan keyin), narx qaysi hollarda o'zgaradi (dollar kursi, elektr tarifi).
- Belgilar va model. Pilotda mijoz videosida qilingan belgilar va ular bilan yaxshilangan model kimniki — oldindan yozing, keyin bahslashmang.
Kitob oxirida
Kitob bitta box dan boshlandi (1-bob) va shartnomagacha keldi. Yo'l davomida hamma raqam o'lchandi: modelning aniqligi, tracker ning xatolari, kameraning piksellari, serverning sig'imi, signalning kechikishi, litsenziya yozuvlari, qonun matni, tannarx. Pilot va shartnoma ham xuddi shu qoidada turadi: va'da emas, o'lchov. Mijozga beriladigan har bir raqamning qayerdan kelgani ko'rsatilsin — o'lchov, manba yoki kelishuv.
Asosiy fikr
- Pilot — mezonlar oldindan kelishilgan sinov; mezonsiz pilot bahs bilan tugaydi.
- Kichik namuna aldaydi: 3/5 = 60% aslida "23% dan 88% gacha". Qabul qoidasi ishonch oralig'ining pastki chegarasiga qaraydi.
- Kerakli namuna hajmi talab va haqiqiy qiymat orasidagi masofaga bog'liq; talab o'lchangan imkoniyatdan kelib chiqib qo'yiladi.
- Sozlash va sinov — alohida ma'lumotda; topishni o'lchash uchun tasodifiy oraliqlar qo'lda ko'riladi.
- Shartnoma texnik mazmuni kitobning boblaridan yig'iladi: nima qiladi, qanday qabul qilinadi, kim nima uchun javob beradi, ma'lumot, litsenziya, narx.
Mashqlar
- 20-bobdagi
Hodisamodeligabahomaydonini (to'g'ri / soxta / noaniq) va admin panelda uni belgilash amalini qo'shing. Qabul hisobotini to'g'ridan-to'g'ri bazadan yig'ing. - Topishni o'lchash uchun tasodifiy tanlov yozing: har kamera va har kun uchun N ta tasodifiy 1 daqiqalik oraliq. Nega oraliqlarni odam o'zi tanlamasligi kerak?
- Bir betlik pilot kelishuvi loyihasini yozing: mezonlar jadvali va yuqoridagi yetti bo'lim. Har bir raqam yonida uning manbasini belgilang: o'lchov, manba yoki kelishuv.
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.