subota, 19. veljače 2022.

Evaluating boosted decision trees for billions of users (by Aleksandar Ilic and Oleksandr Kuvshynov, POSTED ON MARCH 27, 2017 TO ML Applications)

 https://engineering.fb.com/2017/03/27/ml-applications/evaluating-boosted-decision-trees-for-billions-of-users/

 

Facebook uses machine learning and ranking models to deliver the best experiences across many different parts of the app, such as which notifications to send, which stories you see in News Feed, or which recommendations you get for Pages you might want to follow. To surface the most relevant content, it’s important to have high-quality machine learning models. We look at a number of real-time signals to determine optimal ranking; for example, in the notifications filtering use case, we look at whether someone has already clicked on similar notifications or how many likes the story corresponding to a notification has gotten. Because we perform this every time a new notification is generated, we want to return the decision for sending notifications as quickly as possible.

More complex models can help improve the precision of our predictions and show more relevant content, but the trade-off is that they require more CPU cycles and can take longer to return results. Given these constraints, we can’t always evaluate all possible candidates. However, by improving the efficiency of the model, we can evaluate more inventory in the same time frame and with the same computing resources.

In this post, we compare different implementations of a type of predictive model called a gradient-boosted decision tree (GBDT) and describe multiple improvements in C++ that resulted in more efficient evaluations.

Decision tree models

Decision trees are commonly used as a predictive model, mapping observations about an item to conclusions about the item’s target value. It is one of the most common predictive modeling approaches used in machine learning, data analysis, and statistics due to its non-linearity and fast evaluation. In these tree structures, leaves represent class labels and branches represent conjunctions of features that lead to those class labels.

Decision trees are very powerful, but a small change in the training data can produce a big change in the tree. This is remedied by the use of a technique called gradient boosting. Namely, the training examples that were misclassified have their weights boosted, and a new tree is formed. This procedure is then repeated consecutively for the new trees. The final score is taken as a weighted sum of the scores of the individual leaves from all trees.

Models are normally updated infrequently, and training complex models can take hours. At Facebook’s scale, however, we want to update the models more often and run them on the order of milliseconds. Many backend services at Facebook are written in C++, so we leveraged some of the properties of this language and made improvements that resulted in a more efficient model that takes fewer CPU cycles to evaluate.

In the next figure we have a simple decision tree with the following features:

  • the number of clicks on notifications from person A today (feature F[0])
  • the number of likes on the story corresponding to the notification (feature F[1])
  • the total number of notification clicks from person A (feature F[2])

At different nodes, we check the values of the above features and traverse the tree to get the probability of clicking on a notification.

Flat tree implementation

The naive implementation of the decision tree model is a simple binary tree with pointers. However, this is not very efficient due to the fact that the nodes do not need to be stored consecutively in the memory.

On the other hand, decision trees are usually full binary trees (a binary tree in which each node has exactly zero or two children) and can be stored compactly using vectors. No space is required for the pointer; instead, the parent and children of each node can be found by arithmetic on array indices. We will use this implementation for comparison in the experimentation section.

Compiled tree implementation

Each binary tree can be represented as a complex ternary expression, which can be compiled and linked to a dynamic library (DLL) that can be directly used in the service. Note that we can add or update the decision tree model in real time without restarting the service.

We can also take advantage of LIKELY/UNLIKELY annotations in C++. They are directions for the compiler to emit instructions that will cause branch prediction to favor the “likely” side of a jump instruction. If the prediction is correct, it means that the jump instruction will take zero CPU cycles. We can compute branch predictions based on the real samples from the ranking in batches or from the offline analysis, as the distributions from training and evaluation sets should not change much.

The following code represents an implementation of the above simiple decision tree:

int tree(double* F) {
  return LIKELY(F[0] < 1)
    ? (UNLIKELY(F[1] > 10) ? (F[2] > 50 ? 0.1 : 0.05) : 0.01)
    : (F[2] > 100 ? 0.5 : 0.2);
}

Model range evaluation

In a typical ranking setup, we need to evaluate the same trained model on multiple instances of feature vectors. For example, we need to rank ~1,000 different potential candidates for a given person, and pick only the most relevant ones.

One approach is to iterate through all candidates and rank them one by one. Typically, the model and all candidates cannot fit together into the CPU instruction cache. Motivated by the boosted training, we can actually split the model into ranges of trees (the first N trees, then the next N trees, and so on), so that each range will be small enough to fit the cache memory. Then we can flip the evaluation order: Instead of evaluating all trees on a sample, we will evaluate all samples on each range. This way we can fit the whole tree set in the CPU cache together with all feature vectors, and in the next iteration just replace the tree set. This reduces the number of cache misses and uses block reads/writes instead of RAM.

Furthermore, we often have multiple models that we need to evaluate on the same feature vectors; for example, the probability of the user clicking, liking, or commenting on the notification story. This helps keep all feature vectors in the CPU cache and evaluating models one by one.

Another trade-off that we can make is to rank all candidates for the first N trees and then, due to the nature of boosted algorithms, discard the lowest-ranked candidates. This can improve the latency, but it comes with a slight drop in accuracy.

Common features

Sometimes features are common across all feature vectors. In the above example for a certain person, we need to rank all candidate notifications. The feature vectors [F[0], F[1], F[2]] described above can be something like this:

[0, 2, 100]
[0, 0, 100]
[0, 1, 100]
[0, 1, 100]

It’s easily noticeable that the features F[0] and F[2] are the same for candidates. We can significantly reduce the decision tree size by just focusing on the value F[1], and thus improve the evaluation time.

Categorical features

Most ML algorithms use binary trees, and this can be extended to k-ary trees. On the other hand, some of the features are not actually comparable and are called categorical features. For example, if country is a feature, one cannot say whether the value is less than or equal to “US” (or a corresponding enum value). If the tree is deep enough, this comparison can be achieved using multiple levels, but here we implemented the possibility for checking whether the current feature belongs to a set of values.

The learning method is not changed much — we still try to find the best subset to split on, and the evaluation is very fast. Based on the size of the set, we use the in_set C++ implementation or just concatenate if conditions. This reduces the model size and helps in convergence as well.

Computational results

We trained a boosted decision tree model for predicting the probability of clicking a notification using 256 trees, where each of the trees contains 32 leaves. Next, we compared the CPU usage for feature vector evaluations, where each batch was ranking 1,000 candidates on average. The batch size value N was tuned to be optimal based on the machine L1/L2 cache sizes. We saw the following performance improvements over the flat tree implementation:

  • Plain compiled model: 2x improvement.
  • Compiled model with annotations: 2.5x improvement.
  • Compiled model with annotations, ranges and common/categorical features: 5x improvement.

The performance improvements were similar for different algorithm parameters (128 or 512 trees, 16 or 64 leaves).

Conclusion

These improvements in CPU usage and resulting speedups allowed us to increase the number of examples we rank or increase the model size using the same amount of resources. This approach has been applied to several ranking models at Facebook, including notifications filtering, feed ranking, and suggestions for people and Pages to follow. Our machine learning platforms are constantly evolving; more precise models combined with more efficient model evaluations will allow us to continually improve our ranking systems to serve the best personalized experiences for billions of people.


 

LinkedIn profile of Aleksandar Ilic, Principal Software Engineer at Meta

 https://www.linkedin.com/in/aleksandar-ilic-a1650215



Aleksandar Ilic

Principal Software Engineer at Meta

Mountain View, California, United States500+ connections

 About

- Privacy lead for cross account data sharing
- Leading Identity Platform team of 50+ people for the Facebook Family of Apps (Facebook, Instagram, WhatsApp, Oculus) with product applications in Growth, Ads, Analytics, Integrity.
- Built notifications system team at Facebook for targeting and optimizing notifications sending via push, SMS and email
- Senior researcher in the spectral and chemical graph theory, combinatorics, algorithms and social networks (over 100 publications https://scholar.google.com/citations?user=qnL0jnwAAAAJ&hl=en)

 Experience

  • Meta Graphic

    Principal Software Engineer

    Meta

    - Present4 months

  • Facebook Graphic

    Principal Software Engineer

    Facebook

    - 10 years 2 months

    Palo Alto, CA

    - Company privacy lead for cross app data sharing
    - Leading Identity Platform team of 50+ people for the Facebook Family of Apps with applications on Growth, Ads, Accounting, Integrity.
    - Previously team lead (20+ people) on Notifications system used by all teams at Facebook for targeting and optimizing notifications sending via push, SMS, email
    - Previously part of Facebook growth team and responsible for adding 20+ million of incremental MAP and DAP users
    - Designed multiple large…


  • Wowd Graphic

    Software developer

    Wowd

    - 3 years 2 months

    Team leader for classification and indexing.

    Working on: hot list aggregation and distribution, web pages category classification, topics summary generation, user clustering.

  • Assistant Professor

    Faculty of Sciences and Mathematics, University of Nis

    - 3 years 1 month

    Courses: Parallel and concurent programming, Introduction to informatics, Design and analysis of
    algorithms, Introduction to graph theory and combinatorics, Discrete structures

  • Accordia Group LLC Graphic

    Software engineer

    Accordia Group LLC

    - 1 year 1 month

    Working on Information Extraction System and Semantic Search

Education

  • Faculty of Sciences and Mathematics

    PhD in Computer ScienceComputer Science

    -

  • Faculty of Sciences and Mathematics

    Bachelor of MathematicsMathematics and Informatics

    -

Publications

Evaluating boosted decision trees for billions of users

Facebook Engineering

nedjelja, 13. veljače 2022.

Avaz traži 50 miliona evra odštete (Glas Srpske, 30.10.2009.)

 http://www.glassrpske.com/lat/novosti/vijesti_dana/Avaz-trazi-50-miliona-evra-odstete/30211?fbclid=IwAR3QSSj58Ss-bcOiUnUPNcLaaZnkn_EtBP4gx4I6NnTXQNf40NB89DXM82g

 

SARAJEVO - Najveći izdavač u BiH "Avaz" najavio je u petak tužbu protiv OHR-a uz odštetni zahtjev od 50 miliona evra poslije razotkrivanja, kako tvrde, montiranih šema u kojima se politički i vjerski vrh bošnjačke vlasti kao i neki biznismeni u FBiH kvalifikuju kao kriminalna mreža, prenose agencije.

- Zbog nedopustivog i ničim argumentovanog pokušaja rušenja poslovnog kredibiliteta kompanije, "Avaz" će podnijeti krivičnu prijavu protiv zamjenika visokog predstavnika u BiH američkog diplomate Rafija Gregorijana i nepoznatog službenika OHR-a koji se zove Erik i označen je kao autor sporne šeme - navodi se u saopštenju.

Njih dvojica su, smatraju u sarajevskoj medijskoj kući, na "kriminalan način teško zloupotrijebili svoje funkcije i mandat OHR-a".

Dodaju da će za ovaj sudski spor kompanija "Avaz" angažovati referentne advokatske kancelarije u Vašingtonu i u Evropi.

Nedjeljnik "Global", koji je izdanje "Avaza", objavio je u posljednjem broju šeme, koje su navodno napravljene u OHR-u, a kojima se prikazuje dio političko-kriminalne mreže u Federaciji BiH.

Kao vođe mreže označeni su reis Mustafa Cerić, Hasan Čengić, Fahrudin Radončić, Bakir Izetbegović, Alija Delimustafića, Bakir Alispahić i Senad Šahinpašić Šaja.

OHR

Portparol OHR-a Ljiljana Radetić izjavila je "Glasu Srpske" da su "magazin 'Global' od 29. oktobra i dnevne novine 'Avaz' od 30. oktobra objavili priče koje su zasnovali na papirima koje su javno povezali sa Kancelarijom visokog predstavnika".

- Ono što su objavili izgleda kao grafički prikaz izvještavanja iz javnih izvora kroz nekoliko posljednjih godina. Visoki predstavnik duboko i iskreno žali zbog bilo kakve neugodnosti ili neprijatnosti izazvane objavljivanjem ovih članaka - kaže Radetićeva.

 

Vlada/r/ KS iz sjene: Konakoviću prebacili 325 hiljada maraka za dodjelu grantova (Žurnal, Avdo Avdić, 2.10. 2019.)

 objavio Žurnal, 2.10.2019. (novinar Avdo Avdić)

https://zurnal.info/clanak/konakovicu-prebacili-325-hiljada-maraka-za-dodjelu-grantova-/22434?fbclid=IwAR0-hnt6UdRzJtABzlU8EY9KvxdDmBAbdv_Cbm-Ok3MhHr6IXQpgcl-0GKw


Vlada/r/ KS iz sjene: Konakoviću prebacili 325 hiljada maraka za dodjelu grantova

Novac namijenjen za školovanje policajaca, Vlada KS 12. septembra stavila na raspolaganje predsjedavajućem Skupštine da bi on mogao dodijeliti grant Zukorlićevom BANU-u. Ministarstva policije, privrede i finansija odrekla se sredstava u korist Kabineta Elmedina Konakovića 

 

Vlada Kantona Sarajevo prebacila je najmanje 325 hiljada maraka namjenskih sredstava na Kabinet predsjedavajućeg Skupštine KS koje je Elmedin Konaković kasnije, kao grantove, proizvoljno dodjeljivao uduženjima bliskim svojoj političkoj partiji.

Samo u septembru ove godine Vlada je izvršila "preraspodjelu" 95 hiljada maraka, dok je u avgustu Konakovićev kabinet "pojačan" sa 100 hiljada maraka.

U junu je vladaru Kantona Sarajevo prebačeno 80 hiljada maraka, dok je na martovskoj sjednici na Kabinet predsjedavajućeg Skupštine KS preraspoređeno 50 hiljada maraka. Tako su tim preraspodjelama, između ostalog, sredstva namijenjena za školovanje mladih policajaca završila na "razdjelu" predjedavajućeg Skupštine Kantona Sarajevo kako bi on taj novac mogao odobriti "neprofitnim organizacijama".

"Odobrava se preraspodjela sredstava u Budžetu Kantona Sarajevo za 2019. godinu u iznosu od 60 hiljada maraka i to: sa razdjela 17 Ministarstvo unutrašnjih poslova Kantona Sarajevo, glava 02, potrošačka jedinica 0001 - Uprava policije, sa ekonomskog koda - izdaci za školovanje na policijskoj akademiji, na razdjel 10 Skupštine KS, poslanici i parlamentarne grupe, glava 03, potrošačka jedinica 0001 - Kabinet predsjedavajućeg i zamjenika predsjedavajućeg Skupštine KS na ekonomski kod: kapitalni transferi neprofitnim organizacijama", navedeno je u Zaključku Vlade KS usvojenom 12. septembra 2019. godine, objavljenom u posljednjem broju Službenih novina Kantona Sarajevo.

Ovaj iznos identičan je iznosu koji je Elmedin Konaković donirao Bošnjačkoj akademiji nauka i umjetnosti iza koje stoji novopazarski muftija i ideolog Naroda i pravde - Muamer Zukorlić.

"Izdaci za obaveze po kreditima - kamata na domaća pozajmljivanja", pisalo je iza ekonomskog koda sa kojeg je 27. juna ove godine Vlada KS skinula 80 hiljada maraka. Novac je transferisan na Kabinet predsjedavajućeg i zamjenika predsjedavajućeg Skupštine KS. U odluci objavljenoj u Službenim novinama KS nije navedeno kako će predsjedavajući Skupštine KS utrošiti ovaj novac.      

Zaključkom Vlade KS od 29. 3. 2019. godine novac koji se nalazio na računu Ministarstva privrede KS i koji je planiran za podršku "projektima Privredne komore KS, Obrtničke komore KS i Udruženju poslodavaca KS", transferisan je prema Kabinetu predsjedavajućeg Skupštine KS. Šef Skupštine je, potom, tih 50 hiljada maraka transferisao neprofitnim organizacijama.

Ono što je posebno interesantno je zaključak od 1. avgusta ove godine. Prema Budžetu KS, Ministarstvo prostornog uređenja KS planiralo je izdvajaje 100 hiljada KM za "rekontrukciju, adaptaciju, sanaciju, i izgradnju vjerskih objekata i kulturno historijskih objekata". Taj novac je, međutim, transferisan na Kabinet predsjedavajućeg i zamjenika predsjedavajućeg Skupštine KS i to za iste namjene. Dakle, umjesto Vlade Kantona Sarajevo, novac za vjerske objekte dodjeljivao je Elmedin Konaković. Sve zaključke potpisao je premijer Kantona Sarajevo - Edin Forto.

(zurnal.info)

 

 


 

 

 

 

Konaković: Šest miliona KM za nabavku opreme u zdravstvu (akta.ba 18.10.2017.)

 https://www.akta.ba/vijesti/konakovic-sest-miliona-km-za-nabavku-opreme-u-zdravstvu/82844?fbclid=IwAR0LIo9PyS7EbwV4ZCPAeqX9eM-pEtk89lD9WAG2x1ICfxw9Z08cBzjbS8M

 

Premijer Kantona Sarajevo, Elmedin Konaković poručio da satnica, koju traže štrajkači, nikako ne može iznositi 2,75 KM. Smatra da su se troškovi života u KS-u smanjivali, te da nije bilo zakonske obaveze da se usklađuje plata. Zdravstveni radnici Kantona Sarajevo su u štrajku od 13. oktobra. Trenutna satnica u KS za zdravstvene radnike je 2,31 KM, a rade 37,5 sati sedmično. Posljednje usklađivanje satnice je napravljeno 15. aprila 2008. godine..

 (FENA)

Premijer Kantona Sarajevo Elmedin Konaković najavio je da će danas održati sastanak sa predstavnicima Sindikata radnika zdravstva KS-a kako bi usaglasili stavove oko okončanja štrajka.

Konaković je kazao za Fenu da je rebalansom budžeta, koji će se pred zastupnicima Skupštine KS-a naći krajem oktobra, previđeno da se šest miliona KM izdvoji za nabavku opreme, kako bi izdvojenih 15 miliona trošili na plaće.

Poručio je da satnica, koju traže štrajkači, nikako ne može iznositi 2,75 KM.

"Za 40 sati rada sedmično, to bi na mjesečnom nivou iznosilo povećanje od 40.560.000 KM, dok za 37,5 sati 29.650.000 KM i to su novci koje ova Vlada nema. Do izbora bi mogli isplaćivati te plate, ali bi sistem nakon toga krahirao", naglasio je Konaković.

Izrazio je želju da zdravstveni ranici imaju najbolje plate u regionu, jer su najbolji, ali da je nemoguće u godinu dana riješiti sve probleme koji se gomilaju u zdravstvu.

"Bio sam iznenađen činjenicom da imamo čak 15 miliona za povećanje plaća, ali to je bilo malo ili nedovoljno ljudima koji vode jedan od ovih sindikata i napravili su taj štrajk za koji mislim da ne donosi ništa dobro ni nama ni pacijentima", kazao je.

Dodao je da je predstavnike sindikata pozivao više puta da zajedno pregledaju prihode i rashode u zdravstvu, ali da još nisu postigli to.

"Komisije i visoke plate su završena priča, jer je Vlada KS-a to već stavila pod kontrolu i ne postoji ni jedan aktuelan razlog za štrajk", ocijenio je Konaković. 

Smatra da su se troškovi života u KS-u smanjivali, te da nije bilo zakonske obaveze da se usklađuje plata, što štrajkači također prigovaraju.

Konaković u Istanbulu: Pokazali ste kako se brani vlast (N1, 4.08.2016.)

https://ba.n1info.com/vijesti/a107980-konakovic-u-istanbulu-pokazali-ste-kako-se-brani-vlast/

 

Premijer Kantona Sarajevo Elmedin Konaković je u pratnji delegacije posjetio gradonačelnika Istanbula Kadira Topbasa te mu tom prilikom izrazio saučešće zbog žrtava tokom pružanja otpora pokušaju državnog udara FETO-a.

Konaković i Topbas su posjetili mjesto sa fotografijama i imenima poginulih tokom pokušaja državnog udara gdje su pritom položili cvijeće.

Konaković je tokom posjete istakao kako je sa zabrinutošću pratio dešavanja u noći pokušaja puča.

“Ovdje se nalazimo kako bismo odali počast braći koju smo izgubili, a koja je svojim postupcima cijelom svijetu pokazala kako se srčano brani Vlada i vlast izabrana demokratskim putem. Također, ovdje se nalazimo kako bismo poslali jasnu i snažnu poruku u ime svih građana Kantona Sarajevo i BiH. Sa zabrinutošću smo pratili dešavanja tokom ovog izdajničkog pokušaja u Turskoj. Zabrinutost se već narednog dana pretvorila u veoma snažan ponos. Osjećao sam se veoma ponosno zato što su lideri i narod Turske još jednom pokazali cijelom svijetu svoju snagu. Još jednom vam želimo čestitati na stavu u vezi s lekcijom iz demokratije koju ste dali cijelom svijetu”, kazao je Konaković.

Topbas se tokom susreta zahvalio premijeru Kantona Sarajevo na upriličenoj posjeti kao i cijelom narodu BiH.

“Događaj koji se desi u bilo kojoj zemlji utječe na cijeli svijet. Da su ovi izdajnici uspjeli u svome naumu, u svijetu su se mogli pojaviti mnogi problemi i nedaće. Dobro je da je naš narod odmah odgovorio na poziv predsjednika Turske i snagom vjere i iskrenih srca izašli na ulice. Cijelom svijetu su poručili da se protiv volje naroda i građana ništa ne može uraditi. Naš narod je umio stati pred tenkove i avione. Platili smo cijenu, ali ovi izdajnici nisu uspjeli ostvariti svoje ciljeve”, kazao je Topbas.

Na kraju je istakao kako se, nakon posljednjih događaja u Turskoj, više nigdje u svijetu pučisti neće usuditi da zanemare snagu i volju naroda.

 

Narod i pravda, predstavljanje političkog programa i kandidata za nivo HNK/Ž i FBiH (Mostar, 29.08.2018)

 

Na prezentaciji održanoj 29.08.2018. u hotelu Bristol u Mostaru, Narod i pravda predstavio je svoj politički program i kandidate za nivo HNK/Ž i FBiH. Predstavili su se: Elmedin Konaković, Nihada Obradović, Melika Čorbadžić, Nermin Muzur i Ensar Mulaosmanović. Građanima Mostara obratio se i gosp. Senad Šepić, kandidat Nezavisnog bloka za člana Predsjedništva BiH iz reda bošnjačkog naroda kojeg će Narod i pravda podržati na predstojećim izborima, imajući u vidu da im se politički ciljevi podudaraju. Kao glavni ciljevi navedeni su borba protiv korupcije, jačanje ekonomije i unapređenje položaja mladih. Najavili su poduzimanje mjera za utvrđivanje podrijetla imovine i uvođenje reda u javne nabavke. U svojoj kritici postojeće situacije posebno su se osvrnuli na blokade vezane za donošenje propisa iz oblasti turizma zbog nepostojanja dogovora o nivou na kojem će se uplaćivati boravišna taksa, kao i na postojeće propise o kladionicama. Narod i pravda je mlada stranka osnovana 12/03 o.g. kao stranka širokog spektra centra i uglavnom okuplja mlade i obrazovane ljude.