Asosiy qismga o'tish

Pilot va shartnoma: "ishlaydi" ni qanday isbotlash

26-bob 3 kod bloki 1899 so'z

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).

kod/26_pilot.pyyangi fayl · 1-qator: from kitob_yordam import fig, show
python20 qator
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 / nnatija95% oraliq
signal aniqligi, 2 s tasdiq3 / 560%23% – 88%
kaskasiz treklar topildi, 2 s tasdiq3 / 475%30% – 95%
kaskasizlar topildi, har kadr7 / 978%45% – 94%
kaskalilar 'kaskasiz' deb chiqdi, har kadr9 / 1287%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?

kod/26_pilot.pydavomi
python9 qator
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 aniqliktalab 60%talab 70%talab 80%
80%2277—
90%111554
95%6925

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

  1. 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.
  2. 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).
  3. 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.
  4. 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.

kod/26_pilot.pydavomi
python24 qator
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)
mezontalabnatija95% oraliqholat
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 seng yomoni 1.19 s (8 ta)o'tdi
kamera jimligi signali≤ 30 seng yomoni 13.1 s (2 ta)o'tdi
yiqilgandan keyin tiklanish≤ 60 seng 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.

  1. 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.
  2. Qabul. Mezonlar, talablar, namuna hajmi, qaror qoidasi (bu bob), kim belgilaydi va kelishmovchilikda kim hal qiladi.
  3. 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).
  4. 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).
  5. Litsenziya (23-bob). Tanlangan yo'l va uchinchi tomon komponentlari ro'yxati (out/litsenziyalar/*.csv).
  6. Narx (25-bob). Model, to'lov bosqichlari (masalan, bir qismi — qabuldan keyin), narx qaysi hollarda o'zgaradi (dollar kursi, elektr tarifi).
  7. 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

  1. 20-bobdagi Hodisa modeliga baho maydonini (to'g'ri / soxta / noaniq) va admin panelda uni belgilash amalini qo'shing. Qabul hisobotini to'g'ridan-to'g'ri bazadan yig'ing.
  2. 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?
  3. 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.

Telegramda yozish Narxlar