Ako funguje Boost V6 v AAPS: od rozpoznania jedla po dávkovanie inzulínu

V článku o DynISF sme sa venovali výpočtu inzulínovej citlivosti. Pri AutoISF sme videli, ako sa táto citlivosť dá upravovať podľa akcelerácie glykémie a tvaru jej krivky. Boost V6 pracuje s ďalšou časťou rozhodovania, ktorá sleduje priebeh možného jedla naprieč výpočtami slučky a podľa jeho fázy upravuje automatický mikrobolus (SMB).

Pri prvých náznakoch jedla Boost postupuje zdržanlivo. Keď sa nazbiera dostatok dôkazov, môže reagovať výraznejšie. Keď rast slabne, ďalšie dávkovanie tlmí. Pamätá si pritom, či možné jedlo už potvrdil a v akej fáze sa nachádza.

Boost V6 využíva aj strojové učenie, ale inzulín nedávkuje priamym výstupom naučeného modelu. Jeden model odhaduje pravdepodobnosť vzostupu typického pre jedlo, druhý riziko hypoglykémie. Ich výsledky vstupujú do výpočtu riadeného pravidlami, ktorý má vlastné stavy, limity a bezpečnostné kontroly.

Aký problém Boost rieši

AndroidAPS opakovane prepočítava budúcu glykémiu a potrebu inzulínu. Ak používateľ zadá jedlo, systém pozná množstvo sacharidov, s ktorým môže pracovať. Pri neohlásenom jedle vidí iba jeho následok – glykémia začne stúpať.

Taký vzostup je nejednoznačný. Prvé stúpajúce hodnoty môžu byť začiatkom jedla, krátkym výkyvom senzora alebo návratom glykémie po liečbe hypoglykémie. Čakanie na jednoznačnejší dôkaz dáva jedlu náskok. Príliš skorá veľká dávka zas môže spôsobiť neskorý pokles, pretože účinok inzulínu zaostáva za údajmi zo senzora.

Dávkovacie jadro Boost V6 pracuje predovšetkým s rozhodnutím o SMB, pričom využíva podkladové výpočty vrátane predikcií a dynamickej citlivosti. Uchováva si hypotézu možného jedla aj pre ďalší cyklus slučky. Vie teda rozlišovať medzi vzostupom, ktorý ešte len pozoruje, a pokračovaním epizódy, na ktorú už reagoval.

Prvé verzie Boostu používali osem dávkovacích úrovní. V každom cykle si algoritmus vybral jednu podľa glykémie, rýchlosti jej zmeny a zrýchlenia. Podľa autora sa tento prístup ťažko ladil: nastavenie, ktoré pomohlo reagovať na začiatku jedla, mohlo viesť k príliš silnému dávkovaniu neskôr. Boost V6 preto sleduje jednu epizódu jedla v čase. Rozpoznávanie možného jedla, dávkovacie násobitele a brzdy sú oddelené časti výpočtu.

Rozdiel oproti AutoISF

AutoISF mení parameter, s ktorým počíta podkladový algoritmus – ISF, teda očakávaný pokles glykémie po jednej jednotke inzulínu.

Vyhodnocuje niekoľko faktorov. bg_ISF reaguje na výšku glykémie voči cieľu, acce_ISF na zrýchľovanie alebo spomaľovanie krivky, pp_ISF na pretrvávajúci rast a dura_ISF na čas strávený pri zvýšenej glykémii. Výsledný faktor je obmedzený nastavenými hranicami a používa sa pri výpočte upraveného ISF. AutoISF obsahuje aj ďalšie funkcie vrátane variabilného SMB pomeru; jeho úprava citlivosti je však hlavný mechanizmus, s ktorým tu Boost porovnávame.

Zjednodušený vzťah pre túto časť AutoISF je:

Použité ISF ≈ východiskové ISF ÷ výsledný faktor AutoISF

Ak by bolo východiskové ISF 3 mmol/l na jednotku a výsledný faktor 1,5, výpočet by použil približne 2 mmol/l na jednotku. Rovnaká odchýlka od cieľa by potom znamenala vyššiu vypočítanú potrebu inzulínu. Ide len o ilustráciu vzťahu; skutočný výsledok závisí od ďalších faktorov a limitov.

Boost zasahuje do ďalšej časti výpočtu. Prevezme vypočítanú potrebu inzulínu a upravuje návrh SMB podľa fázy možného jedla. AutoISF teda môže pri stúpajúcej glykémii zmeniť výpočet potreby inzulínu. Boost pri tom istom vzostupe môže najskôr dávkovať zdržanlivo, neskôr navrhnúť výraznejšiu dávku a napokon dávkovanie utlmiť.

Skóre možného jedla

Boost v každom cykle vypočíta skóre od 0 do 1. V opisovanej implementácii doň vstupuje sedem členov:

S = clip(0,30D + 0,16A + 0,20M + 0,12L + 0,10T + 0,04E + 0,15R; 0; 1)

Jednotlivé písmená predstavujú tieto signály:

  • D: rýchlosť rastu glykémie.
  • A: zrýchlenie rastu.
  • M: výstup modelu pravdepodobnosti vzostupu typického pre jedlo.
  • L: informáciu o nedávnej nízkej glykémii, ktorá znižuje dôveru v nové jedlo.
  • T: informáciu o dennej dobe.
  • E: informáciu o tom, či algoritmus eviduje cvičenie.
  • R: pretrvávajúci vzostup približne za posledných 30 minút.

Jednotlivé vstupy sa pred sčítaním prevádzajú do porovnateľného rozsahu. Funkcia clip ohraničí výsledok na 0 až 1. Váhy vo vzorci sa spolu rovnajú 1,07, takže súčet môže pred ohraničením prekročiť jednotku.

Skóre 0,60 neznamená 60-percentnú pravdepodobnosť, že človek jedol. Je to zložený ukazovateľ, ktorý spája viacero signálov podľa nastavených váh. Slúži ako jeden z podkladov na zmenu stavu algoritmu.

Model jedla má v tomto súčte váhu 0,20. Sám o sebe preto nepotvrdzuje jedlo ani neurčuje dávku. Denná doba je podobne iba pomocným signálom; nenahrádza zadané sacharidy. Pri dlhšej nedostupnosti výstupu modelu vie Boost skóre počítať aj zo zostávajúcich vstupov.

Čo rozpoznáva model jedla

Názov „model jedla“ je užitočná skratka, no môže vytvoriť dojem, že algoritmus vie, či človek skutočne jedol.

Podľa dokumentácie bol model trénovaný na rozpoznanie situácií, po ktorých glykémia počas nasledujúcich 90 minút vystúpi najmenej o 2,8 mmol/l. Nepozoruje samotné jedenie a neurčuje množstvo zjedených sacharidov. Aj vzostup z inej príčiny preto môže vyzerať ako signál jedla.

Druhý model odhaduje riziko glykémie 3,9 mmol/l, trvajúcej aspoň 15 minút počas nasledujúcich 90 minút. Jeho úlohou v dávkovaní je znižovať návrh inzulínu pri vyššom riziku.

Oba modely sú natrénované vopred a v aplikácii sa používajú v pevnej podobe. Pri bežnom používaní sa na telefóne ďalej netrénujú.

Stavový automat

Skóre sa používa v stavovom automate s piatimi stavmi. Typický priebeh možno zapísať takto:

Idle → Observing → Confirmed → Committed → Recovering → Idle

Tento zápis ukazuje základný smer vývoja. Nie je to povinný harmonogram každého vzostupu.

V stave Idle nie je aktívna hypotéza jedla. Keď skóre dosiahne v opisovanej implementácii hodnotu 0,44, Boost prejde do Observing, teda pozorovania. Ukladá si najvyššie dosiahnuté skóre aj najväčší rozdiel medzi predikovanou a cieľovou glykémiou. Nevyžaduje teda, aby všetky signály vrcholili presne v tom istom cykle.

Bežné potvrdenie jedla vyžaduje viac než samotné skóre. Počas pozorovania musí skóre dosiahnuť aspoň 0,55, predikovaná glykémia musí vystúpiť najmenej o 1,7 mmol/l, nad cieľ a musí uplynúť potrebný čas pozorovania. Algoritmus zároveň preverí, či by dávka pri potvrdení bola zmysluplne väčšia než bežná priebežná dávka.

Pri trvalo silnom signáli sa môže potvrdenie posunúť skôr. Samostatná rýchla cesta existuje pre výrazný, zrýchľujúci vzostup, ak sú splnené jej ďalšie podmienky.

Stav Confirmed znamená, že hypotéza jedla splnila pravidlá algoritmu. Nie je to istota o skutočne zjedenom jedle. Predstavuje príležitosť na jednorazovú výraznejšiu dávku určenú na jeho „dobehnutie“. Boost si pamätá, že k potvrdeniu už došlo.

Potom prejde do Committed, v ktorom pokračuje v priebežnom pokrývaní jedla.

Keď rast dostatočne spomaľuje aj v ďalších cykloch, prejde do Recovering, teda zotavovania. Ak sa počas neho rast znovu výrazne rozbehne, môže sa vrátiť do Committed. Pre tú istú epizódu sa však nevracia k druhej jednorazovej dávke zo stavu Confirmed.

Jedno jedlo naprieč viacerými cyklami

Predstavte si neohlásené jedlo. Nasledujúca tabuľka ilustruje možný priebeh, nie presnú simuláciu ani pevné časy prechodov.

Čo sa deje s glykémiouAko to môže Boost vyhodnotiťČo to znamená pre SMB
Objaví sa prvý vzostupZačína pozorovanie možného jedlaDávkuje zdržanlivo, kým zbiera dôkazy
Rast pokračuje a predikcia sa vzďaľuje od cieľaPri splnení podmienok potvrdí jedloMôže navrhnúť jednorazovú výraznejšiu dávku
Vzostup pokračuje aj po potvrdeníZostáva v CommittedPotrebu priebežne prepočítava
Glykémia je stále vysoká, ale rast slabneUplatnia sa brzdy a neskôr zotavovanieĎalšie dávky tlmí
Počas zotavovania sa rast znovu rozbehneMôže sa vrátiť do CommittedObnoví priebežné pokrývanie bez druhého potvrdenia tej istej epizódy

Dôležitý je najmä predposledný riadok. Vysoká glykémia nemusí znamenať, že treba pokračovať rovnako silným dávkovaním. Algoritmus zohľadňuje aj smer vývoja a aktívny inzulín, ktorý už pôsobí.

Stav pritom sám osebe nezaručuje podanie inzulínu. Aj v stave Confirmed môžu limity a bezpečnostné podmienky výsledný SMB znížiť alebo zastaviť.

Od potreby inzulínu k výslednému SMB

Základom dávky je potreba inzulínu vypočítaná podkladovým algoritmom. Boost z nej vytvorí takzvaný dávkovací rozpočet, ktorý zohľadňuje napríklad odhadované riziko hypoglykémie a obdobie po cvičení.

Slovo rozpočet tu označuje základ výpočtu pre aktuálny cyklus. Nejde o vopred určený celkový bolus na celé jedlo, ktorý by Boost postupne rozdeľoval. V ďalšom cykle sa potreba znovu vyhodnotí z nových údajov. Medzi cyklami zostáva zachovaný stav možného jedla a informácie o jeho priebehu.

Na rozpočet sa následne použije násobiteľ podľa stavu:

StavZákladný násobiteľ v opisovanej implementácii
Idle1,0
Observing0,3
Confirmed1,8
Committed1,0
Recovering0,4

Násobiteľ pri Confirmed môže ovplyvniť používateľské nastavenie agresivity. Zjednodušene:

Predbežná dávka = dávkovací rozpočet × násobiteľ stavu

Tieto čísla opisujú medzivýpočet. Násobiteľ 1,8 preto neznamená automaticky 1,8-násobok predchádzajúceho SMB.

Boost návrh ďalej upravuje podľa rýchlosti vzostupu. Pri pomalšom jedle je potvrdená dávka znížená; pri prudkom vzostupe sa uplatní plná hodnota tohto kroku. Potom prídu limity pre jednotlivé fázy, množstvo aktívneho inzulínu a bezpečnostné kontroly.

Výsledný SMB tak môže byť podstatne menší než hodnota, ktorú by naznačoval samotný násobiteľ.

Silnejší návrh nemusí znamenať väčšiu dávku

Predstavte si čisto matematický príklad: predbežný výpočet navrhne 0,6 jednotky, ale účinný limit dovolí iba 0,3 jednotky. Výsledok nemôže tento limit prekročiť.

Ak by sa predbežný návrh zvýšil na 0,8 jednotky, pri rovnakom limite by sa výsledná dávka nezmenila. Ďalšia bezpečnostná podmienka ju môže ešte znížiť alebo úplne zastaviť.

Pri čítaní rozhodnutí algoritmu preto treba rozlišovať medzi tým, akú dávku výpočet navrhol a akú napokon dovolili jeho obmedzenia. Samotná hodnota násobiteľa alebo vysoké skóre jedla nevysvetľujú konečný SMB.

Brzdy, ktoré rozhodnutie menia

Jednou z bŕzd je IOB, teda inzulín, ktorý ešte pôsobí. Boost znižuje ďalší SMB, keď sa IOB približuje k nastavenému maximu.

Ďalšia brzda reaguje na spomaľovanie vzostupu. Ak glykémia už nerastie rýchlo a jej rast prestáva zrýchľovať, znižuje ďalšiu dávku aj vtedy, keď je aktuálna hodnota stále vysoká.

Hodnota 10 mmol/l tak môže znamenať dve odlišné situácie: glykémia práve prudko stúpa, alebo sa po podaní inzulínu už začína obracať. Rovnaký SMB by v oboch chvíľach nemal rovnaké dôsledky.

Pred dávkovaním sa uplatňujú aj tvrdé podmienky. SMB môže zastaviť napríklad nepriaznivá predikcia minima glykémie alebo nesplnená základná podmienka na povolenie SMB. Ďalšie vrstvy obmedzujú veľkosť jednej dávky aj súčet dávok v čase. Odhad rizika hypoglykémie môže dávkovací rozpočet zmenšiť, no sám dávku nezvyšuje.

Osobitným prípadom je rast po sacharidoch použitých pri hypoglykémii. Na CGM môže vyzerať ako začiatok nového jedla. Boost preto do skóre zahŕňa nedávnu nízku glykémiu a v čase po nej obmedzuje agresívne potvrdenie. Zo samotného senzora však nevie zistiť, prečo človek sacharidy zjedol.

Čo sa prispôsobuje používateľovi

Pevné modely strojového učenia neznamenajú, že sa ostatné časti systému vôbec neprispôsobujú.

Boost používa aj štatistiky vlastnej histórie používateľa, napríklad pri automatickom nastavení parametrov a odhadoch spánkového režimu či obvyklej tepovej frekvencie. Ide o iný mechanizmus než dotrénovanie dvoch predikčných modelov.

Aktivitu Boost vyhodnocuje z počtu krokov vo viacerých časových intervaloch a pri zapojení merania tepu aj z jeho intenzity. Zvýšený tep pomáha rozpoznať námahu s malým počtom krokov, napríklad pri bicyklovaní, aby ju systém nepovažoval za nečinnosť. Podľa rozpoznanej aktivity môže upraviť percento profilu a počas cvičenia zároveň obmedzuje niektoré skoré a agresívne reakcie na možné jedlo.

Pri zapnutej automatickej detekcii spánku kombinuje nočné časové okno, tep blízky pokojovej hodnote, takmer nulový počet krokov a neprítomnosť signálu blížiaceho sa jedla. Prechody vyžadujú pretrvanie podmienok, aby režim neprepínal pri každom výkyve – prebudenie potvrdzuje zvýšenie tepu spolu s pohybom. V nočnom režime môže potlačiť SMB a ponechať reguláciu úpravou dočasného bazálom. Toto potlačenie však platí iba pod hranicou odvodenou od cieľovej glykémie a nastaveného odstupu — pri vyššej glykémii môže SMB opäť aktivovať. Samotný nočný režim pritom nezvyšuje cieľovú glykémiu.

Projekt obsahuje aj experimentálne funkcie, ktoré pracujú v režime „shadow“: zaznamenávajú, čo by navrhli, ale ich výstup priamo neriadi dávkovanie. Pri opisoch učenia je preto dôležité rozlišovať medzi funkciou prítomnou v projekte a funkciou, ktorá skutočne ovplyvňuje podaný inzulín.

Čo z porovnania vyplýva

AutoISF a Boost môžu reagovať na rovnaké zrýchlenie glykemickej krivky, ale zasahujú na inom mieste výpočtu. AutoISF môže zmeniť ISF, čím ovplyvní odhad potreby inzulínu. Boost používa priebeh krivky na určenie fázy možného jedla a podľa nej upravuje SMB.

Jeho technickým jadrom je pamäť priebehu a načasovanie reakcie. Vie, či jedlo iba pozoruje, či ho už potvrdil a či už treba dávkovanie tlmiť.

Táto pamäť však neodstraňuje neistotu. Skoršie potvrdenie môže pomôcť obmedziť vrchol po jedle, ale zvyšuje význam omylu pri falošnom vzostupe. Neskoršie potvrdenie poskytne viac dôkazov, no nechá jedlu väčší náskok. Žiadny výpočet nedokáže odstrániť oneskorenie CGM ani účinku inzulínu.

Boost V6 je experimentálna vetva AndroidAPS. Technické opisy a analýzy rozhodnutí vysvetľujú, ako algoritmus pracuje; nepredstavujú klinický dôkaz lepších výsledkov pre každého používateľa. Pri jeho hodnotení preto treba sledovať celý priebeh po jedle vrátane neskorých poklesov, množstva podaného inzulínu a prípadnej potreby dodatočných sacharidov.

Uvedené váhy, prahy a násobitele opisujú konkrétnu implementáciu Boost V6 a môžu sa vývojom meniť. Nie sú odporúčaním na nastavenie liečby.

Kde hľadať ďalšie informácie

O autorovi

Ľubor Jurena

Zakladateľ skHosting.eu, systémový a sieťový architekt a človek žijúci s diabetom. Na glykemia.sk prepájam osobnú skúsenosť s diabetickými technológiami a prácou pre open-source komunitu.

Viac o mne →

Posted

in

by