Prelucrarea și analiza datelor de pe interfețele de acces ale unei rețele de [630110]
Anexa 3
Universitatea “Politehnica” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației
Prelucrarea și analiza datelor de pe interfețele de acces ale unei rețele de
comunicații mobile
Proiect de diplomă
prezentat ca cerință parțială pentru obținerea titlului de
Inginer în domeniul Electronică și Telecomunicații
programul de studii de licență Tehnologii și Sisteme de Telecomunicații
Conducător(i) științific(i) Absolvent: [anonimizat]. Alexandru VULPE Denisa GHEORGHE
Ing. Mihai IDU
2019
Cuprins
Capitolul 1 Descrierea sistemului LTE ………………………….. ………………………….. ……………………. 3
1.1 Rețeaua de comunicații ………………………….. ………………………….. ………………………….. …. 3
1.2 Evoluția comunicațiilor mobile ………………………….. ………………………….. …………………… 4
1.3 Protocoale utilizate ………………………….. ………………………….. ………………………….. ………. 6
1.3.1 Code Division Multiple Access (CDMA) ………………………….. ………………………….. … 6
1.3.2 Frequency Division Multiple Access (FDMA) ………………………….. ……………………… 6
1.3.3 Time Division Multiple Access (TDMA) ………………………….. ………………………….. … 7
1.4 Sistemul LTE ………………………….. ………………………….. ………………………….. ………………. 8
1.4.1 Arhitectura rețelei LTE ………………………….. ………………………….. ………………………… 8
1.4.1.1 Interfața S1 -MME ………………………….. ………………………….. ……………………….. 10
1.4.1.2 Interfața S1 -U ………………………….. ………………………….. ………………………….. … 11
Capitolul 2 Date și metode de analiză ………………………….. ………………………….. ……………………. 13
2.1 Date ………………………….. ………………………….. ………………………….. …………………………. 13
2.1.1 Noțiuni introducti ve ………………………….. ………………………….. ………………………….. . 13
2.1.2 Parametri de performanță din arhitectura LTE ………………………….. …………………….. 14
2.1.2.1 Parametri de performanță pentru rețea ………………………….. …………………………. 14
2.1.2.2 Parametri de performanță pentru utilizator ………………………….. …………………… 16
2.2 Metode de analiză ………………………….. ………………………….. ………………………….. ………. 18
2.2.1 Metoda pădurilor aleatoare (Random Forests) ………………………….. …………………….. 18
2.2.1.1 Cum funcționează algoritmul ? ………………………….. ………………………….. ……… 19
2.2.1.2 Pași logici de parcurgere ………………………….. ………………………….. ………………. 19
2.2.2 Modelele Gaussian Mixture ………………………….. ………………………….. ………………… 20
2.2.2.1 Pasul E ………………………….. ………………………….. ………………………….. ………….. 21
2.2.2.2 Pasul M ………………………….. ………………………….. ………………………….. ………… 21
2.2.3 Algoritmul regresiei logistice (Logistic Regression) ………………………….. …………….. 22
2.3 Limbajele de programare ………………………….. ………………………….. …………………………. 24
2.3.1 SQL ………………………….. ………………………….. ………………………….. ……………………. 24
2.3.1.1 Limbajul de descriere a datelor – DDL ………………………….. ………………………… 25
2.3.2 Limbaje de programare utilizate în știința datelor ………………………….. ………………… 26
Capitolul 3 Implementare Software ………………………….. ………………………….. ………………………. 29
3.1 Resurse utilizate ………………………….. ………………………….. ………………………….. ………… 29
3.1.1 MySQL Workbench ………………………….. ………………………….. ………………………….. . 29
3.1.2 Spyder (Anaconda) ………………………….. ………………………….. ………………………….. .. 32
3.1.3 Qlik Sense (Desktop) ………………………….. ………………………….. …………………………. 34
3.2 Aspecte practice ………………………….. ………………………….. ………………………….. ………… 36
3.2.1 Extragerea datelor ………………………….. ………………………….. ………………………….. …. 36
3.2.1.1 Crearea bazei de date ………………………….. ………………………….. …………………… 36
3.2.1.2 Extragerea datelor în fișier Excel ………………………….. ………………………….. …… 39
3.2.2 Algoritmii de predicție ………………………….. ………………………….. ……………………….. 40
3.2.3 Vizualizarea rezultatelor ………………………….. ………………………….. …………………….. 48
Capitolul 4 Soluții de îmbunătățire a performanței ………………………….. ………………………….. ….. 53
Concluzii ….…………………………………………………………………………………………57
Bibliografie ….………………………………………………………………………………………59
ANEXA 1 .…………………………………………………………………………………………61
ANEXA 2 .…………………………………………………………………………………………65
ANEXA 3 …………………………………………………………………………………………..67
ANEXA 4 …………………………………………………………………………………………..77
Lista figurilor
Figura 1.1 Împărțirea zonei geografice în celule ………………………….. ………………………….. ………….. 3
Figura 1.2 Reutilizarea frecvențelor ………………………….. ………………………….. ………………………….. . 4
Figura 1.3 Alocarea frecvențelor pentru rețelele celulare ………………………….. ………………………….. . 5
Figura 1.4 Împărțirea benzii de frecvență ………………………….. ………………………….. ………………….. 6
Figura 1.5 Alocarea timeslot -urilor ………………………….. ………………………….. ………………………….. .. 7
Figura 1.6 Multiplexarea în LTE ………………………….. ………………………….. ………………………….. ….. 7
Figura 1.7 Arhitectura rețelei LTE ………………………….. ………………………….. ………………………….. … 8
Figura 1.8 Stiva protocoalelor S1 -MME ………………………….. ………………………….. …………………… 11
Figura 1.9 Stiva protocoalelor S1 -U ………………………….. ………………………….. ………………………… 11
Figura 2.1 Alocarea puterii pe calea descendentă în LTE ………………………….. …………………………. 14
Figura 2.2 Parametri de control ai PUS CH difuzați de eNodeB către UE ………………………….. ……. 15
Figura 2.3 Structura IMSI ………………………….. ………………………….. ………………………….. …………. 17
Figura 2.4 Schema logică de parcurgere a algoritmului Random Forests ………………………….. ……. 20
Figura 2.5 Funcția sigmoid ………………………….. ………………………….. ………………………….. ………… 22
Figura 2.6 Tipuri de comenzi în SQL ………………………….. ………………………….. ………………………. 25
Figura 3.1 Schema generală a implementării ………………………….. ………………………….. …………….. 29
Figura 3.2 Fila de pornire a MySQL Workbench ………………………….. ………………………….. ……….. 31
Figura 3.3 Fila de editare a MySQL Workbench ………………………….. ………………………….. ……….. 31
Figura 3.4 Fila de start Anaconda Navigator ………………………….. ………………………….. ……………… 33
Figura 3.5 Fila de activitate Spyder 4 ………………………….. ………………………….. ………………………. 33
Figura 3 .6 Nodul central Qlik Sense ………………………….. ………………………….. ………………………… 34
Figura 3.7 Vizualizare din interiorul aplicației ………………………….. ………………………….. …………… 35
Figura 3.8 Vizualizare din zona de dezvoltare ………………………….. ………………………….. …………… 35
Figura 3.9 Detalii de autentificare ………………………….. ………………………….. ………………………….. . 36
Figura 3.10 Inserarea înregistrărilor ………………………….. ………………………….. ………………………… 37
Figura 3.11 Descrierea tabelului ………………………….. ………………………….. ………………………….. …. 38
Figura 3.12 Algoritm de extragere a datelor ………………………….. ………………………….. ……………… 39
Figura 3.13 Localizarea fișierului de tip xlsx ………………………….. ………………………….. …………….. 40
Figura 3.14 Diagrama software ………………………….. ………………………….. ………………………….. ….. 40
Figura 3.15 Matricea de corelație a câmpuril or din stats_db ………………………….. …………………….. 42
Figura 3.16 Rezultat al preprocesării datelor ………………………….. ………………………….. …………….. 43
Figura 3.17 Curba ROC – Pădurile aleatoare ………………………….. ………………………….. ……………… 47
Figura 3.18 Curba ROC – Regresia logistică ………………………….. ………………………….. …………….. 48
Figura 3.19 Curba ROC – Variația creșterii ………………………….. ………………………….. ………………. 48
Figura 3.20 Rezultatele votului afișate în Qlik Sense ………………………….. ………………………….. ….. 49
Figura 3.21 Rezultatele filtrate per index ………………………….. ………………………….. ………………….. 49
Figura 4.1 Moduri de duplexare în LTE ………………………….. ………………………….. …………………… 53
Figura 4.2 Schemele de modulaț ie din LTE ………………………….. ………………………….. ………………. 55
Lista tabelelor
Tabelul 1 Evoluția rețelelor celulare comerciale ………………………….. ………………………….. ………….. 4
Tabelul 2 Măsurarea frecvențelor ………………………….. ………………………….. ………………………….. .. 16
Tabelul 3 Limbaje de programare utilizate în știința datelor ………………………….. …………………….. 27
Tabelul 4 Vedere din stats_db ………………………….. ………………………….. ………………………….. ……. 38
Tabelul 5 Rezultatele votului IV ………………………….. ………………………….. ………………………….. …. 44
Tabelul 6 Rezultatele votului Random Forests ………………………….. ………………………….. …………… 44
Tabelul 7 Rezultatul votului ExtraTrees ………………………….. ………………………….. …………………… 44
Tabelul 8 Rezultatul votului Chi Square ………………………….. ………………………….. …………………… 44
Tabelul 9 Rezultatele tuturor voturilor ………………………….. ………………………….. ……………………… 45
Tabelul 10 Scorul final ………………………….. ………………………….. ………………………….. ……………… 45
Tabelul 11 Predicții pe datele de învățare ………………………….. ………………………….. …………………. 46
Tabelul 12 Predicții pe datele de test ………………………….. ………………………….. ……………………….. 46
Tabelul 13 Predicții pe datele de învățare ………………………….. ………………………….. …………………. 47
Tabelul 14 Predicții pe datele de test ………………………….. ………………………….. ……………………….. 47
Tabelul 15 Predicții pe datele de învățare ………………………….. ………………………….. …………………. 47
Tabelul 16 Predicții pe datele de test ………………………….. ………………………….. ……………………….. 47
Tabelul 17 Configurarea TDD ………………………….. ………………………….. ………………………….. ……. 54
Lista acronimelor
3GPP 3rd Generation Parternship Project
AI Artificial Intelligence Inteligența artificială
BTS Base Tranceiver Station Stația de bază
CDMA Code Division Multiple Access Acces multiplu prin divizarea codurilor
CPU Central Processing Unit Unitatea centrală de procesare
DB Database Bază de date
DL Downlink Cale descendentă
FDMA Frequency Division Multiple Access Acces multiplu prin divizarea
frecvenței
GSM Global System Mobile Communications Sistemul global de comunicații mobile
GUI Graphical User Interface Interfața grafică
HD High Definition Calitate înaltă
HLR Home Location Register Registrul de localizare
IP Internet Protocol Protocol de internet
JDBC Java Database Conectivity Conectivitatea la baza de date utilizând
Java
LAN Local Area Network Rețea locală
LTE Long Term Evolution Evoluția pe termen lung
MCC Mobile Country Code Codul țării pentru rețeaua mobilă
MNC Mobile Network Code Codul rețelei mobile
MSIN Mobile Station Identification Number Numărul de identificare al stație i
mobile
ODBC Open Database Conectivity Conectivitatea liberă la baza de date
OFDMA Orthogonal Frequency Division Multiple
Access Acces multiplu prin divizarea
ortogonală a frecvenței
PDSCH Physical Downlink Shared Channel Canalul fizic partajat pe calea
descendentă
PUSCH Physical Uplink Shared Channel Canalul fizic partajat pe calea
ascendentă
QAM Quadrature Amplitude Modulation
QoS Quality of Services Calitatea serviciilor
QPSK Quadrature Phase Shift Keying
RB Resource blocks Blocuri de resurse
ROC Receiver Operating Characteristic Caracteristica de funcționare a
receptorului
SGBD Relational database management system Sistemul de gestiune a bazelor de date
TDMA Time Division Multiple Access Acces multiplu prin divizarea timpului
UE User Equipment Echipamentul utilizatorului
UL Uplink Cale ascendentă
UMTS Universal Mobile Telecommunications
System Sistemul universal de telecomunicații
mobile
WAN Wide Area Network Rețea extinsă
1
Introducere
Am ales tema „ Prelucrarea și analiza datelor de pe interfețele de acces ale unei rețele de comunicații
mobile ” deoarece consider că este unul dintre subiectele de actualitate din domeniul
telecomunicațiilor . Din punctul meu de vedere este important să cunoașt em parametri care au cel mai
mare impact în funcționarea rețelei și ca aceștia să primească atenție sporită în analiza și evaluarea
performanței rețelei. Comportamentul predictiv oferă avantajul că, în cazul unor degradări, se poate
interveni exact pe echi pamentele răspunzătoare și eficiența este una mult mai mare decât atunci când
soluțiile de îmbunătățire sunt aduse ulterior evenimentelor neplăcute.
Un alt motiv pentru care am ale s această temă a fost că în timpul perioadei practicii de vară , efectuat ă
în cadrul Orange România, am acumulat cunoștințe despre tehnologia 4G pe care am vrut să le
dezvolt, realizând un studiu de utilitate practică.
Proiectul are ca obiective trasarea unui comportament predictiv pentru anumiți indicatori de
performanță ai tehno logiei 4G(zona de date) și prezentarea unor soluții de optimizare a
comportamentelor nedorite. În acest sens, se va utiliza extragerea valorilor dintr -o bază de date,
prelucrarea lor cu ajutorul modelului predictiv construit în limbajul de programare Pytho n, iar
rezultatele vor fi vizualizate în utilitarul Qlik Sense.
În scopul realizării celor menționate mai sus, lucrarea este împărțită în patru capitole, după cum
urmează : capitolul 1 conține informații generale despre arhitectura LTE, capitolul 2 conțin e
informații despre datele care urmează să fie analizate și despre metodele prin care va fi realizat acest
lucru, capitolul 3 conține prezentarea programelor în care a avut loc dezvoltarea și detalierea acesteia
din urmă, iar în ultimul capitol, cu numărul 4 voi oferi soluțiile de îmbunătățire a performanței, ceea
ce reprezintă obiectivul lucrării.
2
3
Capitolul 1 Descrierea sistemului LTE
1.1 Rețeaua de comunicații
O rețea mobilă poate fi definită ca o rețea de comunicații care este răspândită pe o suprafață imensă
a teritoriului din întreaga lume, conectată fără fir(wireless) de către transceivere la locații fixe care
sunt cunoscute ca site-uri de celule sau stații de b ază(BTS).
Wireless înseamnă a avea acces la o rețea locală (LAN), o rețea extinsă(WAN) sau o rețea celulară
4G/3G.[ 1]
O rețea celulară este o rețea radio distribuită pe pământ prin intermediul celulelor , în care fiecare
celulă include un transmițător cu locație fixă și putere limitată cunoscut sub denumirea de stație de
bază. Aceste celule împreună oferă acoperire radio pe zone geografice mai mari .
Mărimea unei celule poate varia în funcție de numărul de utilizatori care trebuie d eserviți într-o
anumită zonă și de traficul pe utilizator. Dacă există mult trafic într -o zonă, de exemplu zonă urbană,
dimensiunea celulei va fi mai mică decât în zonele rurale.
Figura 1.1 Împărțirea zonei geografice în celule [2]
Puterea limitată a stației de bază face posibilă reutilizarea aceleiași frecvențe la câteva celule distanță
de stația de bază fără a provoca interferențe , așa cum se vede în Figura 1.2. Astfel, echipamentul
utilizator ului (UE), cum ar fi telefonul mobil , poate comunica chiar dacă se deplasează prin celule în
timpul transmisie i.
O rețea celulară este o modalitate foarte eficientă de utilizare a resurselor cu număr mic de frecvențe .
4
Figura 1.2 Reutilizarea frecvențelor [3]
Spectrul frecvențelor este divizat în acest caz în 3 seturi de frecvențe. Fiecare set este utilizat într -o
altă celulă. Grupul de 3 celule se repe tă pentru a acoperi complet zona geografică.
Când u tilizatorul se mută dintr -o celulă în alta, apelul va fi t ransferat de la un BTS la altul. Acest
proces poartă numele de handover.
Rețeaua păstreză locația echipamentului UE pentru a direcționa un apel de intrare către celula
corespunzătoare. Așadar, o rețea celulară este echipată cu registru de loca lizare (HLR) .
1.2 Evoluția comunicațiilor mobile
Tabelul 1 arată cum au evoluat rețelele celulare de la 1G la 4G, evidențiind caracteristicile cheie
pentru fiecare generație, calitatea serviciilor (QoS) și protocoalele de acces. Toate rețelele celulare
utilizează un spectru de frecvențe licențiat. Rețelele 1G operează pe o bandă de frecvențe între 800 și
900 MHz, în timp ce 2G operează între 1800 și 2000 MHz, iar rețelele 3G între 1800 și 2200 MHz.
Tabelul 1 Evoluția rețelelor celulare comer ciale [4]
Generație/an Caracteristici cheie și
capabilități de acces Fiabilitate, QoS și
performanță Protocoale utilizate
1G/198 1 – utilizează semnale
analogice, mai ales
pentru comunicațiile
de voce
– suportă roaming – afectat de acoperirea
limitată
– QoS nedezvoltat
– performanța nu a
atins așteptările – Frequency Division
Multiple Access
(FDMA), unde fiecare
utilizator are asignat
câte un canal pe durata
apelului
5
2G/1991 – utilizează tehnologia
digitală pentru
securitatea vocii și a
datelor
– suportă roaming
– oferă acces la
rețelele 1G – fiabilitate
îmbunătățită prin
back-up la rețeaua 1G
– QoS mai bun
– performanța nu a
atins așteptările – Time Division
Multiple
Access(TDMA), unde
fiecare utilizator are
asignată o durată de
timp dintr -un canal
sau Code Division
Multiple Access
(CDMA), unde
fiecărui utilizator îi
este asignat un cod
pentru durata apelului
3G/200 1 – suportă conținut
multimedia
– suportă roaming
global printr -un singur
tip de rețea wireless
(cum ar fi rețeaua
celulară), la viteze de
la 384 Kbps până la
câțiva Mbps
– oferă acces la
rețeaua 2G – fiabilitate
îmbunătățită prin
back-up la rețelele 2G
și uneori 1G
– QoS îmbunătățit
– performanța atinge
așteptările TDMA și multiple
variații ale CDMA
4G/201 1 – suportă roaming
global prin multiple
rețele wireless cu
lățime mare a
benzii(50 Mbps sau
chiar mai mult)
– oferă acces către
rețelele 2G și 3G – fiabilitate
îmbunătățită prin
accesul la rețelele 3G
și uneori 2G
– QoS îmbunătățit
considerabil
– performanța atinge
oarecum așteptările Orthogonal FDMA cu
multiple antene
Toate rețelele celulare utilizează un spectru de
frecvențe licențiat. Rețelele 1G operează pe o
bandă de frecvențe între 800 și 900 MHz, în
timp ce 2G operează între 1800 și 2000 MHz,
iar rețelele 3G între 1800 și 2200 MHz.
Rețeaua actuală de 4G are la bază o combinație
a frecvențelor 700, 800 și 2600 MHz .
Datorită nevoii de a transmite cât mai multe
date, purtătoarele wireless 4G încearcă să
achiziționeze sau să reutilizeze multe dintre
benzile licențiate. [4]
Figura 1.3 Alocarea frecvențelor pentru rețelele celulare [4]
6
1.3 Protocoale utilizate
Canalul radio este un mediu de comunicare partajat de mai mulți utilizatori într -o zonă geografică.
Stațiile mobile sunt în concurență una cu alta pentru ca resursa de frecvență să transmită fluxul de
informații. Fără alte măsuri pentru a controla accesul concomitent al mai multor utilizatori, pot apărea
coliziuni. De exemplu, identificarea utilizatorului poate fi denumită ca “acces multiplu” deoarece
stația de bază recepționează simultan un număr de unde radio egal cu numărul de stații care transmit
(UE).
1.3.1 Code Division Multiple Access (CDMA)
CDMA este o tehnologie celulară digitală utilizată pentru comunicații mobile. Sistemele celulare
CDMA sunt considerate superioare celor FDMA și TDMA, motiv pentru care CDMA joacă un rol
esențial în construirea sistemelor de comunicații radio eficiente, robuste și sigu re.
Caracteristici esențiale :
– fiecare canal utilizează tot spectrul disponibil
– conversațiile individuale sunt codate cu o secvență digitală
– asigură capacitate mai bună pentru comunicațiile de voce și date, permițând mai multor
abonați să se conecteze la orice moment de timp
– este platforma pe care s -au construit tehnologiile 3G
1.3.2 Frequency Division Multiple Access (FDMA)
FDMA este una dintre cele mai comune metode analogice de acces multiplu. Banda de frecvență este
împărțită în canale cu lățime de bandă eg ală, astfel încât fiecare conversație să fie difuzată pe o
frecvență diferită (vezi Figura 1.4Eroare! Fără sursă de referință. ).
Figura 1.4 Împărțirea benzii de frecvență [5]
Avantajele FDMA :
– micșorează interferența intersimbol
– este ușor de implementat
– este necesar un număr mic de biți pentru sincronizare (transmisia este continuă)
Dezavantajele FDMA :
7
– debitul maxim per canal este fix și de valoare mic ă
– nu diferă semnificativ de sistemele analogice
1.3.3 Time Division Multiple Access (TDMA)
TDMA este o tehnologia digitală complexă a comunicațiilor mobile celulare care permite mai multor
utilizatori să partajeze aceeași frecvență fără interferențe. Ea împarte un semnal în diferite perioade
de timp și crește capacitatea de transmisie a informațiilor.
În următorul exemplu ( Figura 1.5) aceeași frecvență este folosită de 3 utilizatori. Fiecărui utilizator îi
este atribuit un interval de timp (timeslot) pentru a trimite și recepționa informa ții. Utilizatorul B
transmite după A, iar C transmite după B.
Figura 1.5 Alocarea timeslot -urilor [ 5]
Avantajele TDMA :
– permite debit flexibil
– numărul de timeslot -uri alocate unui utilizator poate fi modificat la fiecare transmisie
Dezavantajele TDMA :
– este necesar un număr mare de biți pentru sincronizare
– funcționarea la rate mari de bit crește consumul de energie
În LTE accesul multiplu se face prin mai multe subpurtătoare, iar metodele de multiple xare în DL
sunt diferite fată de UL.
Pentru DL este folosită multiplexarea OFDMA (Orthogonal Frequency Division Multiple Access),
prin care se alocă mai mulți utilizatori atât in domeniul timp, cât și în domneniul frecvență, conform
Figura 1.6. Pentru UL este folosită multiplexarea SC -FDMA (Single Carrier Frequency Division
Multiple Access), prin care se face alocarea utilizatorilor doar in domeniul timp, conform aceleiași
figuri.
Figura 1.6 Multiplexarea în LTE [ 6]
8
1.4 Sistemul LTE
Tehnologia LTE (Long Term Evolution ) este o tehnologie wireless 4G de bandă largă dezvoltată de
3GPP, un grup de comerț din industrie. Tehnologia LTE a permis conectarea rapidă la internet mobil.
De fapt, LTE este o cale urmată pentru a atinge viteze 4G. LTE este o tehnologie IP completă utilizată
pentru serviciile mobil e de bandă largă pentru transferul de date și apelurile vo cale.
Operatorii wireless și-au extin s rapid rețelele LTE pentru a beneficia de o eficiență suplimentară, o
latență mai mică și capacitatea de a gestiona tot mai mult traficul de date. Între timp, accesul a evoluat
de la TDMA (Time Division Multiple Access ) la OFDMA (Orthogonal Frequency Division Multiple
Access), deoarece nevoia de viteze și volume de date mai mari a crescut.
Această tehnologie a fost creată pentru a suporta viteze de până la 100Mb/s pe calea descendentă
(DL) și 50 Mb/s pe calea ascend entă (UL). Conform Figura 1.7 Figura 1.7 Arhitectura rețelei LTE
[7]întelegem prin cale ascendentă calea de la utilizator la stația de bază, iar calea descendentă de la
stația de bază la utilizator.
LTE față de tehnologiile anterioare, sistemul universal de telecomunicatii mobile UMTS (Universal
Mobile Telecommunications System) și sistemul global de comunicații mobile GSM (Global Sys tem
Mobile Communications), are o arhitectură plată, mai simplă și face trecerea către o rețea de
comunicații bazată în întregime pe un seviciu de transmitere a datelor cu adrese IP (Internet Protocol).
Arhitectura rețelei LTE se împarte în două subrețele.
1.4.1 Arhitectura rețelei LTE
Figura 1.7 Arhitectura rețelei LTE [ 7]
Arhitectura rețelei 4G ( Figura 1.7) se compune din [8] :
• E-UTRAN (Evolved UMTS Terrestrial Radio Access Network) – rețeaua terestră avansată
UMTS de acces radio care se ocupă de comunicația dintre echipamentul utilizatorului si EPC
(Evolved Packet Core).
o UE (User Equipment) – echipamentul utilizatorului alcătuit din :
▪ terminalul mobil, MT (Mobile Termination) – gestionează toate funcțiile de
comunicare
9
▪ echipamentul terminal, TE (Terminal Equipment) – controlează fluxurile de
date
▪ cartela SIM pentru echipamente LTE, UICC (Universal Integrated Circuit
Card) – rulează o aplicație denumită USIM (Universal Subscriber Identity
Module), reprezentând modulul universal de identificare al abonatului .
USIM este responsabil de autentific area utilizatorului în rețea și, de asemenea, permite
autentificarea rețelei la utilizator. USIM utilizează cea mai recentă tehnologie de
criptare în scopul autentficării ce are ca rezultat protecția utilizatorilor și rețelelor
împotriva atacurilor de secu ritate mobile care sunt din ce în ce mai puternice. USIM
menține o bază de date pe post de agendă telefonică, care poate stoca mii de intrări
unde fiecare contact poate avea adrese de e -mail, un al doilea sau al treilea numar de
telefon, etc.
o eNodeB – stația de bază a sistemului LTE. Fiecare eNodeB controlează mobilele din
una sau mai multe celule. În această tehnologie, un mobil este conectat la o singură
stație de bază, funcțiile cele mai importante ale acesteia fiind:
▪ managementul resurselor radio
▪ manag ementul mobilității conexiunii
▪ planificarea resurselor între UE și eNodeB
▪ raportarea măsurătorilor ce ajută la luarea deciziilor de transfer
o interfețe de tip Uu (micround e) – realizează conexiunea dintre UE și eNodeB . Sunt
semnale wireless care formează c elulele mobile.
o interfețele X2 – realizează conexiunea între eNodeB -uri adiacente. Acestea oferă un
nivel mult mai mare de interconectivitate direct, permițând ca multe apeluri să fie
rutate direct, în măsura în care un număr mare de convorbiri și conectăr i sunt
îndreptate către celelalte stații mobile din aceleași celule sau dintr -unele adiacente.
• EPC (Envolved Packet Core) – parte a rețelei responsabilă pentru controlul global al UE și
stabilirea purtătoarelor. Este compusă din cinci noduri principale :
o PCRF – Policy Control and Charging Rules Function este responsabil pentru controlul
politicii de luare a deciziilor, precum și pentru controlul fluxului bazate pe politica de
tarifare în Policy Control Enforcement Function (PCEF) ce se află în P -GW(Packet
Data Network Gateway). PCRF atribuie QoS -ul(clasa de identificare și ratele de bit),
care decide modul în care un anumit flux de date va fi tratat în PCEF și asigură că
acest lucru este în conformitate cu profilul abonamentului utilizatorului.
o P-GW (sau PDN Gateway – Packet Data Network Gateway) este responsabil pentru
alocarea adresei IP pentru UE, precum și punerea în aplicare a QoS -ului în
conformitate cu regulile date de PCRF. Este responsabil cu filtrarea pachetelor IP de
downlink ale utilizatorului în funcție de diferitele QoS -uri ale purtătoarelor. P -GW
efectuează aplicarea QoS -ului pentru a se asigura rata de bit garantată pentru fiecare
purtătoare radio. De asemenea, servește ca punct comun pentru a asigura mobilitate
pentru interconectarea cu teh nologii non -3GPP, cum ar fi CDMA2000 și rețele
WiMAX.
o S-GW (Serving Gateway) – toate pachetele IP ale tuturor utilizatorilor sunt transferate
prin intermediul Serving Gateway -ului care servește ca punct comun pentru
mobilitatea locală a purtătoarelor de date atunci c ând UE se mișcă între diferite
eNodeB -uri. De asemenea, reține informații despre purtătoare atunci când UE este în
10
starea idle și memorează temporar în buffer datele de downlink în timp ce MME – ul
inițiază paging -ul către UE pentru a restabil i purtătoarea. În plus, S -GW efectuează
unele funcții administrative în rețeaua vizitată, cum ar fi colectarea de informații
pentru încărcare (de exemplu, volumul de date trimise sau primite de la utilizator) și
de interceptare legală. De asemenea, serveșt e ca punct comun pentru mobilitatea
interconectării cu alte tehnologii 3GPP: GPRS și UMTS.
o MME – Mobility Management Entity este nodul de control care prelucrează
semnalizarea între UE și Core Network. MME administrează funcțiile de control ale
mobilități i (autentificarea și securitatea) și de interacțiune cu stțiile mobile în stare de
așteptare (actualizarea locației și pagingul), funcții îndeplinite de VLR (Visitor
Location Register), respective GSM (GPRS Mobility Management), în rețele
GSM/GPRS/UMTS. De asemenea, MME controlează purtătoarele alocate la nodurile
din nucleul rețelei și semnalizarea în rețea. Funcțiile principale ale MME -ului pot fi
clasificate astfel:
▪ gestionarea purtătoarei – aceasta include stabilire, menținerea și eliberarea de
purtătoa re.
▪ gestionarea conexiunii – aceasta include crearea conexiunii și securitate între
rețea și UE.
o HSS – Home Subscriber Server conține datele utilizatorilor, printer care și profilele
QoS la care au acces, precum și orice restricții de acces la serviciile de roaming. Acesta
deține, de asemenea, informații despre PDN -urile la care utilizatorul se poate conecta.
În plus, HSS deține informații dinamice cum ar fi identitatea MME la care utilizatorul
este în present atașat sau înregistrat. HSS poate să integreze , de asemenea, centrul de
autentificare (AUC), care generează vectorii de autentificare și chei de securitate.
• Interfețele S1 – Interfața dintre stația de bază și nucleul rețelei se numește interfața S1. De
obicei, aceasta presupune o legătura de fibră op tică sau cablu de cupru de mare viteză. Această
interfață este împărțită în două părți logice, care transportă informația prin același canal fizic.
Acestea sunt S1 User Plane (S1-U), pentru datele utilizatorilor și S1 Control Plane (S1-MME) ,
pentru datele de control ale rețelei LTE.
1.4.1.1 Interfața S1 -MME
Interfața S1 -MME constă dintr -un protocol de transmitere a fluxului de control (Stream Control
Transmission Protocol – SCTP) prin IP și suportă mai multe UE într -o singură asociere SCTP.
Protocolul de semnalizare a aplicației este S1 -AP (Application Protocol).
S1 Control Plane este responsabil pentru:
• interacțiunea eNodeB -ului cu nucleul rețelei pentru comunicări specifice
• transferul mesajelor de semnalizare care țin de utilizatori, de exemplu pentru un apel de voce.
• procedurile de configurare/deblocare a purtătorului EPS (Evolved Packet System – Sistemul
de pachete evoluat)
• procedura de paging
Figura 1.8 prezintă structura protocalelor interfeței S1 Control Plane.
11
Inițializarea interfeței S1 -MME începe cu identificarea MME -urilor la care trebuie să se conecteze
eNodeB -ul, urmată de con figurarea nivelului rețelei de transport (Transport Network Layer – TNL).
Protocolul SCTP este bine cunoscut pentru funcțiile
avansate moștenite de la TCP, iar în plus, este posibil să
beneficieze de caracteristici îmbunătățite, cum ar fi
manipularea flux urilor multiple, pentru a pune în
aplicare cu ușurință redundanța rețelei de transport și
pentru a evita blocarea capătului de linie.
O zonă de simplificare în LTE, față de 3G, este maparea
directă a S1 -AP la SCTP. Acest lucru are ca rezultat o
stivă de pr otocoale simplificată, fără un protocol
intermediar de gestionare a conexiunilor,
Figura 1.8 Stiva protocoalelor S1-MME [9] deoarece conexiunile individuale sunt tratate direct la
nivelul aplicației.
Multiplexarea are loc între S1 -AP și SCTP, prin care fiecare flux al unei asociații SCTP este
multiplexat cu traficul de semnalizare al mai multor conexiuni individ uale.
LTE a construit, de asemenea, flexibilitate în protocoalele de nivel inferior, oferind operatorului
opțiunea completă în ceea ce privește alegerea versiunii IP și a nivelului legăturii de date. De
exemplu, acest lucru permite operatorului să înceapă implementarea utilizând versiunea IP 4 cu
legătura de date adaptată scenariului de implementare a rețelei.
1.4.1.2 Interfața S1 -U
Interfața S1 -U este definită între stația de bază a rețelei LTE, eNodeB, și S -GW.
Figura 1.9 prezint ă structura protocoalelor intefeței S1 User Plane, bazată
pe GTP/UDP5/ stiva IP, cunoscută de la rețelele 3G.
Unul dintre avantajele utilizării GPRS Tunneling Protocol – User plane
(GTP-U) este facilitarea mobilității intra -3GPP.
Numărul versiunii IP și nivelul legăturii de date au fost lăsate pe deplin
opționale, ca și in cazul stivei interfeței S1 – Control Plane.
S-GW trimite pachete downlink ale unui purtător dat la adresa IP a
eNodeB-ului (primită în S1 -AP) asociată cu acel purtător particular. În mod
similar, eNodeB -ul trimite pachete uplink ale unui purtător dat la adresa IP
a EPC -ului (primită în S1 -AP) asociată cu acel purtător particular.
Figura 1.9 Stiva protocoalelor S1 -U [9]
12
13
Capitolul 2 Date și metode de analiză
2.1 Date
Parametri pe care îi voi evalua pe parcursul acestei lucrări, și anume parametri de performanță din
arhitectura LTE sunt stocați într -o bază de date la care mă voi conecta pentru a extrage valorile
acestora.
2.1.1 Noțiuni introductive
Bazele de date reprezintă nucleul sistemelor informatice din orice companie sau instituție, având un
impact major asupra modului de funcționare și organizare al acestora. Totodată oferă o deschidere
majoră asupra pieții pe care o vizează, oferind posibilitatea clienților de a avea acces în mod facil la
datele esențiale de care aceștia au nevoie .
Trebuie avut în vedere faptul că de multe ori, în viața de zi cu zi prin abuz de limbaj, se folosește
termenul de Bază de Date (BD) pentru a desemna de fapt un Sistem de Gestiune a Bazelor de Date
(SGBD).
Putem defini într -o primă etapă o Bază de Date (BD) ca fiind un ansamblu de date structurat,
stocat în mod centra lizat sau nu, pe servere, accesibil, interogabil și modificabil de un grup de
utilizatori care lucrează în paralel, prin intermediul uneia sau a mai multor aplicații. Pe de altă parte,
un Sistem de Gestiune a Bazelor de Date (SGBD) poate fi văzut generic c a un sistem care se ocupă
de structurarea, stocarea, actualizarea și mentenanța datelor, reprezentând de fapt interfața între
baza de da te și utilizator sau aplicațiile acestuia.
În aceasta lucrare vom lucr a cu baze de date relaționale, iar ca sistem d e gestiune a bazei de date se
va utiliza programul MySQL.
Bazele de date relaționale au la bază modelul relațional care lucrează cu două concepte importante:
relație și tabel, Cele două diferă prin natura lor, dar sunt foarte corelate. Noțiunea de relație este
formală, deoarece conceptul provine din matematică, în particular din teoria mulțimilor, în timp ce
noțiunea de table este simplă și intuitivă. Pe de o parte , tabelele oferă o înțelegere naturală a structurii
bazei de date chiar și pentru util izatorii ce nu sunt specializați în domeniu . Pe de altă parte, existența
unei formalizări matematice clare și simple a permis dezvoltarea uneiteorii care să sprijine modelul,
cu rezultate foarte interesante în industrie [10].
Atunci când o relație este co ncepută sub forma unui tablou de valori, fiecare linie din tabel reprezintă
un ansamblu de valori corelate. În cazul modelului relațional, fiecare linie din tabel corespunde de
fapt unei entități sau unei relații din lumea reală . În cazul terminolo giei modelului relațional, o linie
din tabel poartă denumirea de tuplu, înregistrările stocate în coloanele tabelului sunt denumite
atribute, în timp ce tabelele poartă numele de relații. Tipurile de date introduse în fiecare coloană sunt
reprezentate de către un domeniu de valori posibile.
14
Orice relație poate fi definită ca un ansamblu de tupluri. Elementele acestui ansamblu nu sunt
ordonate, adică într -o relație, tuplurile nu se supun nici unei reguli particulare putând fi ordonate în
mod arbitrar.
2.1.2 Parametri de performanță din arhitectura LTE
Un parametru de performan ță este o valoare măsurabilă este utilizată pentru a evalua succesul unui
proiect în atingerea obiectivelor pentru care a fost creat . Parametri de performanță din arhitectura
LTE sunt analizați și din punctul de vedere al satisfacerii utilizatorului, dar și din punctul de vedere
al configurării echipamentelor de rețea. De aceea, în continuare voi oferi câteva exemple de indicatori,
grupați după zona pe care o evalueaz ă (utilizator/ rețea ).
2.1.2.1 Parametri de performanță pentru rețea
• Puterea de transmisie a canalului fizic PDSCH pe traiectul descendent – Physical Downlink
Shared Channel (PDSCH) Power :
o În LTE, PDSCH este singurul canal de transport pe calea descendentă, disponibil
pentru a transporta date despre utilizator între dispozitivul mobil și eNodeB.
o Alocarea puterii downlink poate varia de la celulă la celulă și în plus poate fi specifică
dispozitivului. Aceste setări vor avea un impact asupra performanței unui dispozitiv
compatibil LTE. Iar transferul de date este, bineînțeles, un criteriu de performanță pe
care nu îl judecă numai operatorii de rețea, ci afectează și experiența utilizatorului.
Figura 2.1 Alocarea puterii pe calea descendentă în LTE [ 11]
15
o Puterea PDSCH depinde întotdeauna de alocare, adică de numărul de blocuri de
resurse (RB) alocate. Alocarea se poate schimba de la cadru la cadru , astfel încât P A
poate de asemenea să se schimbe pe o bază de 1 milisecundă. În timp ce încorporează
PA și P B, se asigură că puterea totală a simbolului OFDM rămâne constantă chiar și
atunci când alocarea PDSCH este schimbată. [11]
o Scheme de modulatie – QPSK, 16QAM, 64QAM
o În blocurile de resurse în care semnalele de referință specifice UE nu sunt transmise,
PDSCH se transmite pe următoarele seturi de porturi : {0}, {0,1},{0,1,2,3}.
o În blocurile de resurse în care sunt transmise semnalele de referință specifice UE,
PDSCH se transmite pe portul de antenă {5}
• Puterea de transmisie a canalului fizic PDSCH pe traiectul ascendent : Physical Uplink Shared
Channel(PUSCH) Power:
o Și acest canal conține date informative despre utilizator
o Transportă atât date de utilizator, cât și date de control al semnalului (parametr i legați
de MIMO – Multiple Input Multiple Output și indicatori de format pentru transport)
o Scheme de modulatie – QPSK, 16QAM, 64QAM . eNodeB -ul selectează tipul de
modulație după un algoritm adaptiv. Dacă eNodeB -ul direcționează UE să utilizeze
64QAM, dar acesta nu suportă acest lucru, se selectează automat tipul de modulație
16QAM
o Specificațiile 3GPP definesc puterea transmisă de UE pentru PUSCH după următoarea
ecuație :
PPUSCH = min{ Pmax, 10·log 10 M + P0 + α × PL + δmcs + f(Δi)} [dBm] , unde
Pmax este puterea maximă transmisă care depinde de clasa de putere a UE;
M este numarul de blocuri de resurse
P0 este un parametru specific celulei
α este factorul de compensare a pierderilor și este specific celulei, fiind semnalizat de
controlul resurselor radio (RRC)
PL sunt pierde rile de pe calea descendentă și sunt calculate în UE
δmcs este un parametru al schemei de modulație și codare, specific celulei
f(Δi) este specific UE. Δ i este valoarea de corecție a unei bucle închise, iar f este
funcția care ne permit e să utilizăm valoarea absolută a lui Δ i. [12]
Figura 2.2 Parametri de control ai PUSCH difuzați de eNodeB către UE [12]
Parametrii specifici celulei arată că ei sunt aceeași pentru toate UE din acea celulă.
16
• Lărgimea de bandă în LTE sau Bandwidth
o Lărgimile de bandă definite de standard sunt 1.4, 3, 5, 10, 15 și 20 MHz. De obicei,
pentru căile ascendentă și descendentă se folosește o lărgime de bandă de 5 MHz.
Tabelul 2 arată câte subpurtătoare și câte blocuri de resurse sunt în fiecare lărgime de
bandă pentru calea ascendentă și descendentă.
Tabelul 2 Măsurarea frecvențelor
Lărgimea de bandă Blocuri de resurse Subpurtătoare pentru
calea ascendentă Subpurtătoare pentru
calea descendentă
1.4 MHz 6 73 72
3 MHz 15 181 180
5 MHz 25 301 300
10 MHz 50 601 600
15 MHz 75 901 900
20 MHz 100 1201 1200
• Descărcarea per celulă – Cell Throughput:
o În termeni simpli, este suma throughput -ului mediu pentru toți utilizatorii dintr -o rețea.
Matematic, este throughput -ul mediu per utilizator în interiorul celulei înmulțit cu
numărul de utilizatori din rețea.
o Nu este neapărat adevărat ca dacă există un throughput mare pentru un utilizator dintr –
o celulă să atragă după sine un throughput mediu mare per celulă, și invers. Acest lucru
se poate naște datorită faptului că este posibil ca o celulă să aibă un throughput mare
pentru celulă și u nul foarte scăzut pentru utilizator deoarece o celulă poate avea unii
utilizatori care se află în condiții excelente de acoperire, în timp ce alții se pot afla în
condiții slabe de acoperire.
• Numărul cadrului de sistem – System Frame Number (SFN)
o Este așa cum îi spune și numele un contor și indică restul împărțirii index -ului cadrului
de sistem la 1024. Index -ul este cuprins în intervalul 0, 1023 și este format pe 10 biți.
o SFN se incrementează cu 1 la fiecare 10ms.
o SFN nu ajută la sincronizarea fizică (frecvența purtătoarei, etc.) pentru că este o
informație obținută după sinconizarea cu forma de undă.
o SFN ajută la sincronizarea nivelului fizic dintre canalele fizice ale căii ascendente și
cele ale căii descendente. [13]
2.1.2.2 Parametri de performanță pen tru utilizator
• IMSI -ul terminalului mobil (International Mobile Subscriber Identity )
o este un dispozitiv de interceptare telefonică folosit pentru interceptarea traficului de
telefonie celulară și pentru supravegherea mișcării utilizatorilor de aparate mo bile.
17
o În linii mari, el acționează ca o falsă celulă de telefonie mobilă, care se interpune între
telefonul -țintă și adevăratul turn -antenă al companiei de telefonie.
o Este de obicei un număr de 15 digiți, dar poate fi și mai scurt și este stocat într -un
câmp de 64 de biți.
o Este trimis de echipamentul mobil către rețea.
o Este utilizat de orice rețea mobilă care interacționează cu alte rețele.
o Conține codul țării (MCC), codul rețelei mobile (MNC) și numărul de identificare a
stației mobile (MSIN) (vezi Figura 2.3)
Figura 2.3 Structura IMSI [14]
• Numărul de antene ale terminalului mobil
o În comunicațiile celulare, numărul maxim de antene pentru calea descendentă este 2
și 4 pentru a susține LTE -ul.
o Conceptul de mai multe antene este o tehnică inteligentă care a depășit limitările
tehnicii MIMO.
o MIMO este u n element esențial al comunicației fără fir în rețelele 4G care se referă la
conceptul de a trimite și recepționa în același timp semnale de date multiple pe același
canal radio , utilizând propagarea în mai multe căi. Prin aceasta se utilizează o tehnică
de transmisie numită multiplexare spațială (SMX) . Rangul este definit ca numărul de
straturi dintr -o transmisie de multiplexare spațială LTE, adică este un indicator al
funcționării antenelor multiple. Firește, antenele multiple funcționează bine dacă
semnalul de la fiecare antenă nu are corelație sau i nterferență cu celelalte.
• Throughput -ul pentru utilizator
o În termeni simpli, este cantitatea medie de date pe care le primește un utilizator
conectat în rețeaua LTE.
o Matematic, acesta poate fi definit ca numărul de pachete primite de un anumit
utilizato r (UE) într -un anumit moment.
o Pentru a maximiza capacitatea globală a celulei, throughput -ul utilizatorilor nu este
cea mai bună metrică pe care trebuie să o urmărim.
18
• Identificatorul temporal al rețelei radio – Radio Network Temporary Identifier (RNTI)
o Este utilizat pentru a diferenția modul de conectare al UE în interiorul celulei, canalul
radio specific, un grup de UE al cărui control al puterii este emis e eNodeB, informații
de sistem transmise de către eNodeB tuturor utilizatorilor.
o Există ma i multe tipuri de RNTI, cum ar fi: SI-RNTI, P -RNTI, C -RNTI , etc.
▪ SI-RNTI (System Information RNTI) este utilizat pentru furnizarea
informațiilor de sistem, este un RNTI comun, nu este alocat explicit niciunui
UE, are o lungime fixă de 16 biți și valoarea s a este fixată la 65535 (0xFFFF).
▪ P-RNTI (Paging RNTI) este utilizat de UE pentru a recepționa paginarea, este
și el de asemenea un RNTI comun , are o lungime fixă 16 biți și valoarea sa
este fixată la 65534 (0xFFFE).
▪ C-RNTI (Cell RNTI) este o identificaere unică folosită pentru identificarea
conexiunilor RRC (Radio Resource Control – controlul resurselor radio) și
planificărilor dedicate unui anumit UE. C-RNTI are o lungime de 16 biți și
valoarea sa poate varia de la 1 la 65523 (0x0001 până la 0xFFF3). [15]
2.2 Metode de analiză
Conceptul de învățare mecanică ( machine learning ) se referă la studiul științific al algoritmilor și
modelelor statistice pe care sistemele informatice le folosesc pentru a îndeplini eficient o s arcină
specifică fără a folosi instrucțiuni explicite, bazându -se în schimb pe modele și inferențe. Este văzută
ca un subset al inteligenței artificiale. Algoritmii de învățare mecanică realizează un model matematic
bazat pe date de probă, cunoscut e sub nu mele de "date de învățare ", pentru a face predicții sau decizii
fără a fi programate în mod explicit pentru a îndeplini sarcina. În aplicarea sa în întreaga problemă
de afaceri, învățarea mecanică este menționată ca analiză predictivă. [16]
Sarcinile învățării mecanice sunt clasificate în două mari categorii: învățare supravegheată și învățare
nesupravegheată.
În învățarea supravegheată, algoritmul construiește un model matematic dintr -un set de date care
conține atât intrările, cât și ieșirile dorite. Algoritmii de clasificare și algoritmii de regresie sunt tipuri
de învățare supravegheată. Algoritmii de clasificare sunt utilizați atunci când ieșirile sunt limitate la
un set limitat de valori. Algoritmii de regresie sunt renumiți pentru ieșirile lor conti nue, adică pot
avea orice valoare într -un interval. Exemple de valori continue sunt temperatura, lungimea sau prețul
unui obiect.
În învățarea nesupravegheată, algoritmul construiește un model matematic dintr -un set de date care
conține numai intrări și etichete de ieșire dorite.
În continuare voi prezenta câteva caracteristicii esențiale ale unor modele de analiză foarte bine
cunoscute în domeniul învățării mecanice.
2.2.1 Metoda pădurilor aleatoare (Random Forests)
Metoda p ăduril or aleatoare (Random Forests) este un algoritm pe care dacă ar fi să îl încadrăm în una
din cele două categorii menționate anterior, l -am aminti în grupul celor de învățare supravegheată .
19
Poate fi folosit atât pentru clasificare, cât și pentru regresie. Este, de aseme nea, algoritmul cel mai
flexibil și ușor de utilizat. O pădure este formată din copaci. Pădurile aleatoare creează arbori de
decizie pe eșantioane de date selectate aleatoriu, obțin previziuni din fiecare copac și selectează cea
mai bună soluție prin vot. De asemenea, oferă un indicator destul de bun al importanței
caracteristicilor.
Metoda p ăduril or aleatoare a re o varietate de aplicații, cum ar fi motoarele de căutare , clasificarea
imaginilor , selecția caracteristicilo r, clasifica rea solicitanți lor de credite loiali, identificarea activit ății
frauduloas e și a prezice rea bolilor.
2.2.1.1 Cum funcționează algoritmul ?
[17] Să presupunem că vre ți să merg eți într-o excursie și vre ți să călător iți într -un loc unde vă veți
bucura.
Deci, ce fac eți pentru a găsi un loc care vă va plăcea? P uteți căuta online, citi recenzii despre blogurile
și portalurile de călătorie sau vă puteți întreba și prietenii.
Să presupunem că ați decis să întrebați prietenii dumneavoastră și ați discutat cu ei despre exper iența
lor de călătorie din trecut în diverse locuri. Veți primi câteva recomandări de la fiecare prieten. Acum
trebuie să faceți o listă a locurilor recomandate. Apoi, le cereți să voteze (sau să aleagă un loc potrivit
pentru călătorie) din lista locurilor recomandate pe care ați făcut -o. Locul cu cel mai mare număr de
voturi va fi alegerea dvs. finală pentru călătorie.
În procesul de decizie de mai sus, există două părți. În primul rând, întrebați -vă prietenii despre
experiența lor individuală de călătorie și obținerea unei recomandări din mai multe locuri pe care le –
au vizitat. Această parte este ca și cum ați folosi algoritmul arborelui de decizie. Aici, fiecare prieten
face o selecție a locurilor pe care le -a vizitat până acum.
A doua parte, după colecta rea tuturor recomandărilor, este procedura de votare pentru selectarea celui
mai bun loc din lista de recomandări. Acest întreg proces de a primi recomandări de la prieteni și de
a le vota pentru a găsi cel mai bun loc este cunoscut sub numele de Algorit mul Pădurilor Aleatoare
(Random Forests) .
Din punct de vedere tehnic, este o metodă de ansamblu (bazată pe abordarea divizată și cucerire) a
arborilor de decizie generați pe un set de date divizat întâmplător. Această colecție de clasificatori de
arbori de decizie este, de asemenea, cunoscută sub numele de pădure. Fiecare arbore depinde de o
probă independentă aleatorie. Într -o problemă de clasificare, fiecare copac votează și clasa cea mai
populară este aleasă ca rezultat final. În cazul regresiei, media tu turor producțiilor arborilor este
considerată ca fiind rezultatul final. Este mai simplu și mai puternic comparativ cu ceilalți algoritmi
de clasificare neliniară.
2.2.1.2 Pași logici de parcurgere
Algoritumul lucrează în patru pași :
1. Selectează eșantioane aleatoare dintr -un set de date dat.
20
2. Construiește un arbore de decizie pentru fiecare probă și obține un rezultat de decizie din
fiecare arbore de decizie.
3. Efectuează un vot pentru fiecare rezultat prezis.
4. Selectează rezultatul predicției cu cele mai multe voturi ca predicție finală.
Figura 2.4 Schema logică de parcurgere a algoritmului Random Forests
2.2.2 Modelele Gaussian Mixture
Distribuțiile amestecurilor (mixture distributions) sunt utile în modelarea eterogenității într -o analiză
cluster. A fost demonstrat că, cu n = 10 000 de observații, un amestec (mix) de aproximativ 30 de
normale este suficient pentru a produce o aproximare bună a densității normale a logaritmului, în timp
ce pentru un amestec de 10 000 de normale a fost necesar un estimator de densitate a kernelului. Acest
lucru se datorează capacității modelului de amestec de a modela distribuții destul de complexe atunci
când se alege un număr convenabil de componente pentru a obține reprezentăr i exacte ale zonelor
locale care su portă distribuția adevărată. Cu această caracteristică, sunt tratate variațiile locale ale
datelor observate sunt tratate, în timp ce o singură familie parametrică nu ar fi în măsură să facă acest
lucru . [18]
Modelul Gaussian Mixture , adesea denumit GMM, se bazează pe o funcție de densitate a
probabilității parametrice care este reprezentată ca o sumă ponderată a densităților componentelor
gaussiene. Parametrii modelului se estimează prin utilizarea algoritmului Expect ation -Maximisation
(EM – așteptare – maximizare ) pe datele de învățare .
Pentru un set de date D = {x 1,…., xN}, unde x i este un vector d -dimensional de observații, presupunem
că punctele sunt IID (independente și identic distribuite) și că densitatea lor de bază
p(x) este definită ca un model de amestec finit cu componente K. Funcția parametrică de probabilitate
este dată de :
p(x|λ) = ∑𝜔𝑘𝑔𝑘(𝑥|µ𝑘,∑𝑘)𝐾
𝑘=1 ,
21
unde λ = {ωk,μk,∑k}, k = 1,….,K denotă parametrii GMM, numiți mărimea amestecului ω k pentru
care
∑𝜔𝑘=1𝐾
𝑘=1
mijlocul µ k și covarianța matricii ∑ k.
ωk reprezintă probabilitatea ca un x selectat aleatoriu să fie generat de componenta k. Parametrii µ k
și ∑ k descriu densitatea vectorului de date d -dimensional cu valoare continuă a măsurătorilor x, care
sunt reprezentate matematic de funcțiile gaussiene g(x|µk,∑k) , k = 1,…,K de forma :
gk(x|µ k,∑k) = 1
(2𝜋)𝑑/2 |∑𝑘|1/2 exp { – 1
2 (x – µk)’ ∑(𝑥−µ𝑘)−1
𝑘 }.
O metodă comună de estimare a parametrilor, dată de o secvență N de vectori de învățare X = {x 1,. .
. , x N} și setările de configurare ale GMM, este estimarea maximă a probabilității
(maximumlikelihood – ML). Estimarea se realizează prin maximizarea probab ilității ca GMM să ia
în considerare datele de antrenament în X. Prin urmare, vrem să maximizăm
p(X|λ) = ∏𝑝(𝑥𝑖|𝜆)𝑁
𝑖=1
cu presupunerea c ă vectorii sunt independenți datorită necesității de a face problema maleabi lă, deși
această presupunere este adesea incorectă. Maximizarea directă a lui p(X|λ) nu este posibilă, dar prin
utilizarea estimării algoritmului de așteptare -maximizare (EM) a parametrilor ML se poate obține
iterativ. Acest lucru se realizează prin estimarea unui model îmbunătățit nou, di ntr-un model inițial,
astfel încât p (X|𝜆̅) ≥ p(X|λ) . Prin iterarea acestui pas până la convergență, adică până schimbarea
mijloacelor este mică, se obțin parametrii modelului. Mai jos voi arăta pașii E,M :
1. Decidem în câte surse/grupuri (k) vrem să împă rțim datele.
2. Inițializăm parametrii µ𝑘, ∑𝑘 și 𝜔𝑘.
2.2.2.1 Pasul E
Calculăm pentru fiecare punct 𝑥𝑖 probabilitatea 𝛾𝑖,𝑘 ca acesta să aparțină grupului k cu :
𝛾𝑖,𝑘 = 𝜔𝑘𝑔𝑘(𝑥𝑖|µ𝑘,∑𝑘)
∑𝜔𝑗𝑔𝑗(𝑥𝑖|µ𝑗,∑𝑗)𝐾
𝑗=1
𝛾𝑖,𝑘 ne oferă pentru fiecare punct 𝑥𝑖 valoarea raportului : 𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑡𝑎𝑡𝑒𝑎 𝑐𝑎 𝑥𝑖 𝑠ă 𝑎𝑝𝑎𝑟ț𝑖𝑛ă 𝑔𝑟𝑢𝑝𝑢𝑙𝑢𝑖 𝑘
𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑡𝑎𝑡𝑒𝑎 𝑐𝑎 𝑥𝑖 𝑠ă 𝑎𝑝𝑎𝑟ț𝑖𝑛ă 𝑡𝑢𝑡𝑢𝑟𝑜𝑟 𝑔𝑟𝑢𝑝𝑢𝑟𝑖𝑙𝑜𝑟
Astfel, dacă 𝑥𝑖 este foar te aproape de un gaussian k, va obține o valoare ridicată pentru acest gaussian
și valori relativ scăzute pentru celelalte.
La sfârșitul acestui pas vom obține o matrice de N x K, cu suma fiecărei linii egală cu 1.
2.2.2.2 Pasul M
Aici parametrii pentru fiecare gaussian k sunt actualizați utilizând 𝛾𝑖,𝑘. Reestimarea componentelor
𝜆̅ este posibilă utilizând formulele, pentru care 1 ≤ k ≤ K :
22
𝜔̅𝑘 = 1
𝑁 ∑𝛾𝑖,𝑘𝑁
𝑖=1
µ̅𝑘= ∑𝛾𝑖,𝑘∗ 𝑥𝑖𝑁
𝑖=1
∑𝛾𝑖,𝑘𝑁
𝑖=1
∑k = ∑𝛾𝑖,𝑘∗(𝑥𝑖−µ̅𝑘)(𝑥𝑖−µ̅𝑘)´𝑁
𝑖=1
∑𝛾𝑖,𝑘𝑁
𝑖=1
Pentru fiecare implementare a pașilor E și M, este efectuată câte o iterație. Aceasta trebuie repetată
până când probailitatea sau parametrii converg. Astfel, vom logaritma p(X |λ) dup ă fiecare iterație, iar
atunci când este găsită convergența, oprim iteraț ia.
log p(X|λ) = ∑log𝑝(𝑥𝑖|𝜆)𝑁
𝑖=1 = ∑(log∑𝜔𝑘𝐾
𝑘=1𝑔𝑘(𝑥𝑖|µ𝑘,∑𝑘))𝑁
𝑖=1
2.2.3 Algoritmul regresiei logistice (Logistic Regression )
Regresia logistică este în esență un algoritm de clasificare supravegheat. Într -o problemă de
clasificare, variabila ți ntă (sau ieșire), y, poate lua doar valori discrete pentru setul de caracteristici
dat (sau intrări), X.
Modelul construiește un model de regresie pentru a prezice probabilitatea ca o intrare de date să
aparțină categoriei numerotate ca "1". La fel ca regresia liniară care presupune că datele urmează o
funcție liniară, regresia logistică modelează datele folo sind funcția sigmoid . [19]
Figura 2.5 Funcția sigmoid [19]
Regresia logistică devine o tehnică de clasificare numai atunci când un prag de decizie este adus în
discu ție. Setarea valorii pragului este un aspect foarte important al regresiei logistice și depinde de
problema de clasificare în sine.
Decizia privind valoarea pragului este afectată în mare măsură de valorile preciziei și reapelării. În
mod ideal, dorim ca atât precizia cât și reapelarea să fie 1, dar acest lucru este foarte rar. În cazul unui
compromis P recizie -Reapelare , folosim următoarele argumente pentru a decide asupra situației:
– Precizie redusă / Reapelare ridicată: În aplicațiile în care vrem să reducem numărul de falsuri
negative fără a reduce neapărat numărul de falsuri pozitive, alegem o valoare a deciziei care
are o valoare redusă a preciziei sau o valoare ridicată a reapelării.
23
De exemplu, într -o aplicație de diagnosticare a cancerului, nu vrem ca niciun pacient afectat
să fie clasi ficat ca nefiind afectat, fără a acorda o atenție deosebită dacă pacientul este
diagnosticat greșit cu cancer. Acest lucru se datorează faptului că absența cancerului poate fi
detectată de alte boli medicale, însă prezența bolii nu poate fi detectată pentr u un pacient deja
respins.
– Precizie înaltă / Reapelare redusă: În aplicațiile în care vrem să reducem numărul de falsuri
pozitive fără a reduce neapărat numărul de falsuri negative, alegem o valoare de decizie care
are o valoare ridicată a preciziei sau a o valoare scăzută a reapelării. De exemplu, dacă
clasificăm clienții dacă vor reacționa pozitiv sau negativ la o reclamă personalizată, dorim să
fim absolut siguri că clientul va reacționa pozitiv la publicitate, deoarece, în caz contrar, o
reacție negativ ă poate provoca pierderi potențiale de vânzări de la client.
Pe baza numărului de categorii, regresia logistică poate fi clasificată astfel:
– Binom ială: variabila țintă poate avea doar 2 tipuri posibile: "0" sau "1" care pot reprezenta
"câștiga" vs "pierd ere", "trece" vs "eșu ează", "mort" vs "viu"
– Multinomial: variabila țintă poate avea 3 sau mai multe tipuri posibile care nu sunt ordonate
(adică tipurile nu au semnificație cantitativă) cum ar fi "boala A" vs "boala B" vs "boala C".
– Ordinal: se ocupă cu va riabilele țintă cu categorii ordonate. De exemplu, un scor de test poate
fi clasificat ca: "foarte slab", "slab", "bun", "foarte bun". Aici, fiecare categorie poate primi
un scor ca 0, 1, 2, 3.
O să detaliez cea mai simplă formă de regresie logistică (cea binomială) printr -un exemplu.
Considerăm cazul care mapează numărul de ore de studiu și rezultatul de la examen. Rezultatul poate
lua doar două valori pentru care 1 înseamnă promovat și 0 eșuat.
Nr ore 0,5 1 1,5 2 2,5 3 3,5 4 5
Scor 0 0 0 1 1 1 1 1 1
– Setul de date are ‘p’ caracteristici și ‘n’ observații
– Matricea caracteristicilor este reprezentată în felul următor :
X = (1𝑥11 ⋯𝑥1𝑝
⋮⋱⋮
1𝑥𝑛1⋯𝑥𝑛𝑝)
Unde 𝑥𝑖𝑗 conține valoarea celei de -a j caracteristică pentru a i observație.
Pentru a i obervație, 𝑥𝑖 poate fi reprezentat ca :
𝑥𝑖=
[ 1
𝑥𝑖1
𝑥𝑖2
⋮
𝑥𝑖𝑝]
h(𝑥𝑖) reprezintă răspunsul predicției pentru observația de indice i. Formula utilizată pentru a calcula
h(𝑥𝑖) este numită ipoteză și este de forma :
24
h(𝑥𝑖) = 𝛽0+𝛽1𝑥𝑖1+𝛽2𝑥𝑖2+ …. + 𝛽𝑝𝑥𝑖𝑝
unde 𝛽0, 𝛽1, …., 𝛽𝑝 sunt coeficienții regresiei.
Și într -o formulă compactă : h( 𝑥𝑖) = 𝛽𝑇𝑥𝑖.
2.3 Limbaj ele de programare
2.3.1 SQL
SQL (Structured Query Language sau limbaj structurat de interogări ) reprezintă un limbaj de
programare care permite crearea de baze de date, adăugarea de informații și recuperarea de date
precise care sunt necesare la un anumit moment de timp. Limbajul SQL a fost dezvoltat în special
pentru lucrul cu baze de date precise care se axează pe modelul relațional, fii nd în prezent cel mai
utilizat limbaj folosit în cadrul sistemelor de gestiune a bazelor de date.
Limbajul SQL permite atât definirea structurii (schemei) bazei de date cât și manipularea
acesteia, sub formă de interogări (comenzi) pe care sist emele de gestiune a bazelor de date trebuie să
le execute în mod corespunzător. Aceste interogări pot fi introduse direct în terminal, rezultatul
afișându -se direct pe ecran sau pot fi trimise indirect către SGBD prin intermediul unor programe
dezvoltate î n limbaje de programare precum C++, Java, PHP, caz în care rezultatele sunt stocate linie
cu linie în variabile de program.
Limbajul SQL funcționează pe bază de operatori și interogări. Printre cei mai importanți operatori se
enumără egalitatea (EQUAL) “ =”, diferența (“!=” sau “<>”), mai mare ca (“>”), mai mic ca (“<”),
mai mare sau egal (“>=”), mai mic sau egal (“<=”), operatorul între (BETWEEN) ce se folosește la
definirea unor intervale, asem enea (LIKE) folosit pentru a descoperi un model, în (IN) pent ru a găsi
unul sau mai multe rezultate dintr -o mulțime, este (IS) pentru a compara cu valoarea NULL și precum
(AS) folosit pentru a schimba un nume de câmp atunci când se vizualizează rezultatele. O variabilă
NULL este o variabilă specială, ce specifică fa ptul că într -un câmp anume, nu se află nicio valoare.
NULL este diferit de 0, sau de un câmp ce conține spații, acestea la rândul lor reprezentând valori.
În prezent există o multitudine de dezvoltatori de sisteme de gestiune a bazelor de da te care
oferă diferite funcționalități pentru ușurarea modului de interacțiune al utilizatorului cu baza de date
pe care o administrează sau o utilizează. Putem aminti aici de câteva exemple de sisteme de gestiune
a bazelor de date, precum: MySQL, Oracl e, IBM DB2, Microsoft SQL Server, etc. Având în
vedere însă, că SQL este un limbaj standardizat la nivel internațional, toate aceste sisteme adoptă
o aceeași normă pentru definirea relațiilor și manipularea datelor .
Limbajul SQL este format din patru componente , după cum urmează în Figura 2.6:
25
Figura 2.6 Tipuri de comenzi în SQL
În această lucrare voi folosi două dintre cele patru categorii, celelate nefiind de interes pentru
subiectul pe care îl tratez :
-Limbajul de descriere a datelor (DDL – Data Description Language) care permite definirea
schemei (structurii) bazei de date, definirea tabelelor și a relațiilor dintre elementele componente,
precum și atribuirea drepturilor d e acces a utilizatorilor la baze de date;
-Limbajul de manipulare a datelor (DML – Data Manipulation Language) permite
adăugarea de informații în baza de date (INSERT), actualizarea (UPDATE) sau ștergerea
(DELETE) lor, precum și interogarea datelor pentru a avea acces doar la o subcolecție de
informații care sunt utile utilizatorului la un anumit moment de timp. [10]
2.3.1.1 Limbajul de descriere a datelor – DDL
Limbajul de descriere a datelor este compus în principal din trei comenzi: CREATE, ALTER și
DROP. Instrucțiunea CREATE este folosită pentru crearea structurii (schemei) esențiale a bazei de
date, ALTER pentru modificarea structurii existente și DROP pentru ștergerea acesteia în întregime
sau doa r a unor componente (tabele).
O bază de date este definită de propria sa schemă. Din acest motiv, SQL propune crearea unei scheme
înainte de definirea componentelor sale (tabele). Acest lucru se poate realiza cu ajutorul
instrucțiunilor :
CREATE SCHEMA s tats_db;
26
Sau
CREATE DATABASE stats_db;
Cele două instrucțiuni sunt echivalente. Crearea unei baze de date nu implică și selecția ei. De aceea,
pentru a o putea manipula este necesară utilizarea comenzii USE.
USE stats_db;
Odată creată baza de date și selectată, se pot defini tabele cu ajutorul clauzei CREATE TABLE
specificând numele tabelului, n umele și tipul coloanelor (numele atributelor plus domeniul asociat)
precum și constrângerile acolo unde este cazul.
Odată definită structura unui tabel, aceasta poate fi verificată/vizualizată cu ajutorul comenzii :
DESCRIBE mytable;
2.3.2 Limbaje de programare utilizate în știința datelor
În urma parcur gerii literaturii de specialitate referitoare la limbajele de programare utilizate în știința
datelor, am ajuns la concluzia că răspunsul la întrebarea „c are este cel mai bun limbaj utilizat în
conceputul de machine learning ? ” este unul subiectiv deoarece el poate fi dat doar în urma unei
experiențe personale sau baz ându -ne pe aspectul unui set de date.
Mai jos, voi construi o statistică pentru fiecare limbaj și aria sa de aplicabilitate , urmând să iau o
decizie asupra limbajului pe care îl voi utiliza în partea de dezvoltare .
27
Caracteristici/Limbaj Python C/C++ Java R JavaScript
Popularitate Utilizat 57% 43% 41% 31% 28%
Prioritizat 33% 19% 16% 5% 7%
Aria de
aplicabilitate Prioritizat cel
mai mult Analiză: 44 %
Procesare de limbaj
natural: 42 %
Exploatare web: 37% Inteligența artificială
în jocuri: 29%
Locomoția roboților:
27%
Securitatea rețelelor:
26% Managementul
clienților: 26%
Securitatea
rețelelor: 23%
Detecția fraudei:
22% Analiză: 11%
Bioinformatică:
11%
Detecția fraudei:
9% Managementul
clienților: 10%
Motoare de căutare:
9%
Prioritizat cel
mai puțin Inteligența artificială
în jocuri: 26%
Detecția fraudei: 26%
Securitatea rețelelor:
24% Detecția fraudei: 12%
Sisteme de
recomandare: 12%
Analiză: 9% Analiză: 15%
Bioinformatică:
13% Inteligența
artificială în jocuri:
3%
Locomoția
roboților: 1% Mentenanță
industrială: 2%
Bioinformatică: 2%
Analiză: 2%
Istoricul
profesional Prioritizat cel
mai mult Știința datelor: 38% Inginerie electronică:
32% Dezvoltarea
aplicațiilor desktop:
21% Analist date: 14% Dezvoltare web:
16%
Prioritizat cel
mai puțin Inginerie mecanică:
27% Dezvoltare web: 8% Inginerie
electronică: 13% Inginerie
electronică: 3% Inginerie
electronică: 3%
Motive pentru
a-l folosi în
algoritmii de
machine
learning Prioritizat cel
mai mult Curiozitatea de a afla
detalii despre machine
learning: 38% Pentru a adăuga
machine learning
aplicațiilor existente:
20% La solicitarea
companiei: 27% Obținerea diplomei
de studii: 7% Creșterea șanselor
de a avea proiecte
profitabile: 8%
Prioritizat cel
mai puțin Obținerea diplomei de
studii: 26% În construirea
aplicțiilor de înaltă
competiție : 14% Curiozitatea de a
afla detalii despre
machine learning:
14% Curiozitatea de a
afla detalii despre
machine learning:
5% Obținerea diplomei
de studii: 5% Tabelul 3 Limbaje de programare utilizate în știința datelor [20]
28
• Așadar, conform [21], Python conduce pachetul acestor limbaje, 57% dintre cercetătorii de
date și dezvoltatorii de machine learning îl folosesc, iar 33% îl acordă prioritate în dezvoltare.
Nu e de mirare, având în vedere toată evoluția cadrelo r Python de învățare profundă din ultimii
2 ani .
• Python este adesea comparat cu R, dar nu este nici pe departe comparabil în ceea ce privește
popularitatea: R se află pe locul patru în utilizarea generală (31%) și al cincilea în prioritizare
(5%). Aceasta înseamnă că în majoritatea cazurilor R este un limbaj complementar, nu o primă
alegere , o indicație clară că tendințele de utili zare ale Python sunt opuse celor ale lui R.
• C / C ++ este îndepărtat față de Python, atât în utilizare (44%) cât și în prioritizare (19%).
Inteligența artificială (AI) în jocuri (29%) și locomoția robo ților (27%) sunt cele două zone
în care C / C ++ este favorizat cel mai mult, având în vedere nivelul de control, performanța
ridicată și eficiența necesară. Aici, un limbaj de programare de nivel inferior, cum ar fi C / C
++, care vine cu biblioteci AI extrem de sofisticate, este o alegere naturală.
• Java urmărește foarte îndeaproape C / C ++, în t imp ce JavaScript este al cincilea în utilizare,
deși cu o performanță puțin mai bună de prioritizare decât R (7%) . În schimb, Java este
prioritată mai mult de cei care lucrează la securitatea rețelelor / atacurile cibernetice și
detectarea fraudelor, cele două zone în care Python este cel mai puțin prioritizat.
În urma acestei analize, am luat decizia de a utiliza limbajul Python, însă înainte de aceasta doresc să
mă informez și despre câteva dezvantaje pe care le pot întâmpina odată cu utilizarea acestui limbaj.
Argumente contra
• Știm că Python este un limbaj interpretat, codul din Python este executat linie cu linie . Astfel,
Python duce deseori la executarea lentă în comparație cu alte limbi de programare. Viteza nu
este o problemă decât dacă este un punct principal pentru proiect.
• Deoarece Python este un limbaj dinamic, acesta necesită mai multe teste și are erori care apar
doar în timpul rulării .
• Python are limitări cu accesul la baza de date. În comparație cu JDBC și ODBC, nivel ul de
acces al bazei de date al Python este considerat subdezvoltat și primitiv. De asemenea, nu
poate fi aplicat în întreprinderile care au nevoie de o interacțiune lină a datelor moștenite
complexe.
• Python nu acceptă mai multe fire de execuție din cauza blocării globale a in terpretorului, adică
GIL; acest lucru permite doar un singur fir de execuție la un moment dat. Programele cu mai
multe fire de execuție legate de CPU pot fi mai lente decât cele cu un singur fir de execuție ;
Așadar, consider că dezavantajele mai sus menți onate nu vor avea un impact important asupra
algoritmului pe care o să îl dezvolt, de aceea voi rămâne la decizia de a utiliza limbajul de programare
Python.
29
Capitolul 3 Implementare Software
Figura 3.1 este o reprezentare grafică a întregului proces descris în prezenta lucrare. Așa cum am
menționat și în introducere, în prima etapă a implementării se vor obține o serie de indicatori de
performanță (trafic, încărcare, calitatea canalului), rezultați în u rma filtrării cu ajutorul interogărilor
SQL a unor seturi de date generate de interacțiunea utilizator – rețea. Mai departe, datele obținute în
prima etapă vor fi divizate în date de învățare și date de test astfel încât să faciliteze rularea unui
model pr edictiv peste ele. Rezultatele generate de algortimul predictiv vor fi prezentate sub formă
grafică și vizualizate , aceasta etapă fiind ultima etapă a implementării software a procesului.
Figura 3.1 Schema generală a implementării
Baza de date este stats_db și este create în utilitarul MySQL, iar modelul predictiv va fi ales unul
dintre mai mulți pe care îi voi aplica printre care se numără Regresia Logistică sau algoritmul
Pădurilor aleatoare. În parte de vizualizare rezultate, vor fi prezentate atât rezultate ale etapelor
intermediare ale codului, cât și rezultatele finale pe baza cărora se va emite o serie de concluzii.
3.1 Resurse utilizate
Cele trei etape descrise la începutul acestui capitol au fost posibile ca rezultat al utilizării a trei utilitare
: pentru prima etapă am folosit MySQL Workbench, unde am creat o bază de date în care am inserat
datele colectate, pentru a doua etapă , colectarea datelor din bază și crearea modelului predictiv le -am
efectuat în utilitarul Spyder dezvoltat pentru limbajul de programare Python, iar reprezentarea grafică
a rezultatelor am ales să o efectuez prin intermediului utilizarului Qlik Sense, utilizat frecvent în
analiza datelor.
3.1.1 MySQL Workbench
În cadrul acestui material va fi utilizat pentru exemplificare sistemul de gestiune al bazelor de date
MySQL dezvoltat de compania suedeză MySQL AB. MySQL este un sistem de tip open source
(codul sursă este disponibil în mod gratuit și poate fi modificat în funcție de necesitățile
programatorului), foarte popular printre dezvoltatorii de aplicații software și pagini web. Are la
30
bază limbajul de date SQL, rulează pe orice tip de sistem de operare și poate fi interconectat cu
ușurință cu alte aplicații de zvoltate în limbaje de programare precum: C++, Java, Pyth0n , PHP, etc .
[10]
MySQL Workbench este un instrument grafic pentru lucrul cu serverele și bazele de date MySQL.
MySQL Workbench suportă pe deplin versiunile serverului MySQL 5.6 și versiuni ulterio are.
Funcționalitatea MySQL Workbench acoperă cinci subiecte principale [22]:
1) Dezvoltare SQL: vă permite să creați și să gestionați conexiuni la serverele de baze de date.
Înainte de a vă permite să configurați parametrii conexiunii, MySQL Workbench ofer ă
posibilitatea de a executa interogări SQL pe conexiunile bazei de date utilizând editorul SQL
încorporat.
2) Modelarea datelor (Design): vă permite să creați modele de schemă de bază de date, în mod
grafic, invers și inginer între o schemă și o bază de dat e live și să editați toate aspectele bazei
dvs. de date folosind editorul de tabele complet. Editorul de tabel oferă facilități ușor de
utilizat pentru editarea tabelelor, coloanelor, indexurilor, declanșatorilor, partiționării,
opțiunilor, inserturilor și privilegiilor, rutinelor și viziunilor.
3) Administrare server: Permite administrarea instanțelor serverului MySQL prin administrarea
utilizatorilor, efectuarea de backup și recuperare, inspectarea datelor de audit, vizualizarea
sănătății bazei de date și m onitorizarea performanței serverului MySQL.
4) Migrarea datelor: Vă permite să migrați de la Microsoft SQL Server, Microsoft Access,
Sybase ASE, SQLite, SQL Anywhere, PostreSQL și alte tabele sau obiecte către MySQL.
Migrarea acceptă, de asemenea, migrarea de la versiunile anterioare ale MySQL la cele mai
recente versiuni.
5) Suport pentru MySQL Enterprise: Suport pentru produsele Enterprise precum MySQL
Enterprise Backup, MySQL Firewall și MySQL Au dit.
MySQL Workbench este disponibil în două ediții: ediția comunitară și ediția comercială. Ediția
comunitară este disponibilă gratuit. Ediția comercială oferă funcții Enterprise suplimentare, cum ar
fi accesul la MySQL Enterprise Backup, MySQL Firewall și MySQL Audit.
Când este pornit, MySQL Workbench se deschide în fila ecranului de “acas ă”. Inițial, pe ecran se
afișează un mesaj de întâmpinare și se afișează link -uri către Documentatie ( Browse
Documentation> ), Blog (Read the Blog> ) și Discuții de pe forumuri (Discuss on Forums> ). În plus,
ecranul de pornire oferă acces rapid la conexiunile, modelele MySQL și expertul de migrare MySQL
Workbench.
Așa cum este prezentat în figura următoare, un panou lateral de pe ecranul de acasă vă perm ite să
comutați între conexiunile MySQL (selectate în figura) . Ultima opțiune din panoul lateral deschide
MySQL Workbench Migration Wizard într -o filă nouă.
31
Figura 3.2 Fila de pornire a MySQL Workbench
Accesul în pagina de editare se realizează prin intermediul autentificării cu nume de utilizator și
parolă, care sunt setate în timpul instalării utilitarului. În cazul de față, pentru autentificarea în instanța
locală se va folosi utilizatorul ‘root’, iar p arola, de asemenea, ’root’.
Fila de editare va fi cea din imaginea următoare, iar semnificațiile pictogramelor vor fi explicate
ulterior.
Figura 3.3 Fila de editare a MySQL Workbench
32
1) Fila ecranului inițial. Ea oferă acces rapid la conexiuni, modele și expertul Migrație MySQL.
Spre deosebire de celelalte file principale, fila ecranului de pornire nu se închide.
2) Fila Conexiune. Fiecare conexiune făcută serverului MySQL este reprezentată de o filă de
conectare separată. Un server poate fi activ sau inactiv când fila de conectare este deschisă.
3) Fila de interogări SQL. Fila interogare SQL este o filă secundară care se deschide implicit
când faceți o conexiune la un server MySQL. Fiecare fila de interogar e este identificată în
mod unic printr -un număr incrementant: interogarea 1, interogarea 2 și așa mai departe. Toate
filele de interogări SQL oferă o zonă pentru editarea interogărilor.
4) Bara de meniu principală. Bara de meniu are următoarele meniuri: Fiș ier, Editare, Vizualizare,
Interogare, Bază de date, Server, Instrumente, Scripting și Ajutor. Acțiunile disponibile vă
depind de tab -ul selectat când faceți clic k pe un meniu.
5) Bara principală de instrumente
6) Acțiuni rapide
7) Panoul lateral al barei. Bara laterală are două etichete principale: Navigator și Informații.
Etichetele sunt omise pe unele gazde.
8) Panoul lateral secundar (Adăugări SQL)
9) Panoul zonei de ieșire. Panoul de ieșire poate afișa un rezumat al interogărilor executate în
următoarele forme: Ieșire de acțiune, Ieșire text sau Ieșire istoric.
3.1.2 Spyder (Anaconda)
[23] Spyder este un mediu științific puternic scris în Python, pentru Python, proiectat de oameni de
știință, ingineri și anali ști de date. Dispune de o combinație unică între funcționa litatea avansată de
editare, analiză, depanare și profilare a unui instrument de dezvoltare cuprinzător, cu explorarea
datelor, execuția interactivă, inspecția profundă și capabilitățile de vizualizare frumoase ale unui
pachet științific. În plus, Spyder o feră integrarea cu multe pachete științifice populare, printre care
numerele NumPy, SciPy, Pandas, IPython, QtConsole, Matplotlib, SymPy și altele. Dincolo de
numeroasele caracteristici încorporate, Spyder poate fi extins și mai mult prin intermediul
plugi nurilor terțe. ca o bibliotecă de extensii PyQt5, permițându -vă să vă bazați pe funcționalitatea
acesteia și să încorporați componentele sale, cum ar fi consola interactivă sau editorul avansat, în
software -ul propriu.
Spyder este inclus în mod implicit în distribuția Anaconda Python, care vine cu tot ce aveți nevoie
pentru a începe într -un pachet „totul în unul” .
33
Figura 3.4 Fila de start Anaconda Navigator
În Figura 3.5 este reprezentată interfața Spyder, unde 1) reprezintă zona de editare, 2) zona de afișare
(ajutor, variabile, grafice, fișiere), iar 3) consola sau zona de depanare.
Figura 3.5 Fila de activitate Spyder 4
1) Editorul multi -lingvistic al lui Spyder integrează un număr de instrumente puternice pentru o
experiență de editare eficientă și ușor de utilizat. Caracteristicile cheie ale editorului includ
evide nțierea sintaxei (pigmenți); codul în timp real și analiza stilului (pyflakes și
pycodestyle); finalizarea la cerere, divizare orizontală și verticală și multe altele.
34
2) Puteți utiliza panoul de ajutor pentru a găsi și afișa documentația pentru orice obiect , inclusiv
module, clase, funcții și metode. Ajutorul poate fi preluat atât prin analiza statică a fișierelor
deschise în Editor, fie prin inspectarea dinamică a unui obiect într -o Consola IPython.
Puteți să declanșați ajutor introducând manual numele obie ctului în caseta Obiect, apăsând
comanda rapidă de configurare (Ctrl -I în mod implicit) sau chiar automat, dacă doriți, când
introduceți o paranteză stângă (() după numele unei funcții sau metode.
“Variable Explorer ” afișează conținutul spațiului de nume ( toate referințele globale ale
obiectelor, cum ar fi variabilele, funcțiile, modulele etc.) ale sesiunii IPython Console
selectate și vă permite să interacționați cu acestea printr -o varietate de editori bazați pe GUI.
3) Depanarea în Spyder este susținută pr in integrarea cu depanatorul ipdb îmbunătățit din
Consola IPython. Aceasta permite vizualizarea și controlul punctelor de întrerupere și a
fluxului de execuție chiar de la GUI -ul Spyder, precum și de la toate comenzile familiare ale
consolei IPython.
3.1.3 Qlik Sense (Desktop)
Qlik Sense este un utilitar utilizat adesea în știința datelor și este un serviciu de sine stătător. El oferă
utilizatorilor săi posibilitatea de a crea vizualizări personalizate și interactive ale datelor, rapoarte și
tablouri de control , cu mare ușurință.
Atunci când deschidem versiunea de desktop (Qlik există și în variantă server), Qlik Sense se
deschide în nodul central (hub). Nodul central fiind locul în care se regăsesc toate aplicațiile, iar dacă
facem click pe una dintre ele, ea se va deschide într -o pagină separată.
Figura 3.6 Nodul central Qlik Sense
35
A) Bara de instrumente de putem deschide sau închide meniul de navigare, scurtătură către
locația de stocare a Qlik Sense, locul de căutare a aplicațiilor
B) Informații de autentificare
C) Rubrica de creare a unei noi aplicații
D) Domeniul de găzduire al aplicațiilor
E) Zona principal care conține toate aplicațiile create
F) Adresă către documente de învățare
O aplicație Qlik Sense este o colecție de elemente de date reutilizabile (măsuri, dimensiuni și
vizualizări), pagin i și povești. Este o entitate autonomă care include date într -un model de date
structurat pentru analiză. [24]
Scopul unei aplicații este de a ne permite să face m descoperiri și d ecizii de date utilizând vizualizările
de date și efectuarea de selecții.
Figura 3.7 Vizualizare din interiorul aplicației
Figura 3.8 Vizualizare din zona de dezvoltare
Elemente de creare :
• Script de încărcare a datelor – ne putem conecta la baze de date, fișiere Excel, pagini ale
fișierelor Excel, etc.
• Modelul de date
• Măsurători – sunt expresii și calcule aplicate datelor pentru a fi vizualizate . Expresiile sunt
compuse din funcții de agregare, cum ar fi sum sau max, combinate cu unul sau mai multe
câmpuri
• Dimensiuni – determină cum vor fi grupate datele în vizualizare
Vizualizările sunt următorul pas după crearea aplicației și încărcarea datelor. Ele permit prezentarea
datelor astfel încât utilizatorii aplicației să le poată interpreta și explora, sunt ușor de adăugat și
personalizat și pot lua forma unor diagrame, tabele, hărți sau altele.
Pentru a crea vizualizări eficiente este nevoie ca datele și sursele de să fie în înțelese, să fie alese
corespunzător tipurile de vizualizări care se potrivesc scopului și ca acestea să fie cât mai inteligibile
utilizatorului.
36
3.2 Aspecte practice
Pornind de la Figura 3.1, voi descrie etapele menționate în subcapitolele următoare.
3.2.1 Extragerea datelor
Această etapă cuprinde două stări : una de creare a bazei de date , conținând măsurătorile colectate de
pe dispozitive și apoi extragerea lor într -un fișier de tip Excel.
3.2.1.1 Crearea bazei de date
În utilitarul MySQL Workbench, am creat conexiunea cu numele ’Local instance MYSQL80’ la care
este posibilă autentificarea utilizând numele de utilizator ‘root’ , numele host-ului ‘localhost’, portul
‘3306’ , așa cum este evidențiat în Figura 3.9 în rubrica ‘Schemas -Session’ .
Figura 3.9 Detalii de autentificare
Vom vedea ulterior c ă pentru a putea folosi valorile introduse în câmpuril e bazei de date în scopuri
externe (cum ar fi utilitarul Spyder) este nevoie de aceste date de autentificare .
În continuare, trecem la realizarea propriu -zisă a bazei de date , lucru posibil prin comenzile (descrise
în secțiunea 2.3.1.1 ) :
Mai apoi urmează crearea tabelului care are numele ‘mytable’ cu câmpurile și tipul datelor ce vor fi
inserate în aceste câmpuri . Pentru a optimiza structura tabelelor este necesară întotdeauna alegerea
tipului de date potrivit care utilizează cât mai puțină memorie, dar care să permită stocarea oricărei
informații care ar putea fi plasată în acea categorie.
37
Câteva dintre declarări p ot fi observate în Figura 3.9 în fila de interogări SQL (vezi Figura 3.3).
De exemplu, nu are sens definirea coloanei “agent_info0capabilities4 ” ca un tip de date
VARCHAR( 5) deoarece despre lungimea șirului de caractere se știe că nu va depăși 3 , însă pe de altă
parte, dacă definim coloana “agent_info0capabilities0” ca un tip de date VARCHAR(3), există riscul
ca pentru unele înregistrări să nu poată fi stocată informația complet.
Instrucțiunea ‘drop table’ este utilizată în momentul în care în tabel adaug înregistrări noi pentru a
șterge conținutul vechi.
Tipuri de date numerice exacte – permit reprezentarea unei valori în mod precis sub formă de număr
întreg sau fracționar.
• BIGINT – reprezintă un număr întreg foarte lun g, reprezentat pe 64 de biți. Domeniul de
valori în cazul reprezentării cu semn este de la -9223372 036854775808 (-263) până la
9223372036854775808 (263). Domeniul de valori în cazul reprezentării fără semn este de la
0 până la 18446744073709551615(264). Opț ional se poate impune ca numărul să fie
reprezentat din M cifre (BIGINT(M)).
• BIT – reprezintă un număr întreg care poate lua una din valorile 0,1, NULL [10]
Tipuri de date tip șir de caractere
a) VARCHAR (M) – definește un șir variabil de caractere de lungim e maximă M . În acest caz,
lungimea șirului de caractere (și implicit spațiul de memorie necesar pentru stocare) se
stabilește adaptive în funcție de informația introdusă în coloană, dar nu poate depăși valoarea
lui M . [10]
După declararea tuturor câmpurilor, urmează inserarea valorilor. O instrucțiune de inserare arată de
tipul celei de mai jos și conține numele tabelului în care se inserează , numele coloanelor din tabel în
care se inserează și apoi valorile ce se inserează în câmpurile menționate :
INSERT INTO mytable
(`bs_id`,`agent_info0agent_id`,`agent_info0bs_id`,`agent_info0capabilities0`,`ag
ent_info0capabilities1`, ……..
,`LClcUeConfig0lcConfig2qosBearerType`,`LClcUeConfig0lcConfig2qci`,`total_bytes_
sdus_ul`,`total_bytes_sdus_dl`,`y`) VALUES (10005,5,10005,'LOPHY','HIPHY',
……., 0,1,2181380,389398,'yes');
Captura următoare de ecran confirm faptul că înregistrările au f ost inserate cu succes.
Figura 3.10 Inserarea înregistrărilor
38
După ce am definit structura tabelului doresc să o vizualizez, așa că voi folosi în cele din urmă
comanda:
DESCRIBE mytable;
al cărei rezul tat l-am atașat în Figura 3.11.
Figura 3.11 Descrierea tabelului
Iar mai jos, în , vom avea o vedere asupra tabelului creat, conținând numai câteva dintre coloanele
pe car e le conține baza de date , însă este un aspect destul de important pentru a vedea sub ce formă
se prezintă datele în baza de date create.
Tabelul 4 Vedere din stats_db
39
3.2.1.2 Extragerea datelor în fișier Excel
Pentru a face posibilă extragerea datelor se va scrie un al goritm în Python (vezi ANEXA 2) , după
cum urmează în Figura 3.12.
Figura 3.12 Algoritm de extragere a datelor
Așa cum am menționat în secțiunea 3.2.1.1 , am folosit credențialele de autentificare în baza de date
pentru a avea permisiunea de a citi și prelua datele din tabel .
Interogările SQL cu ajutorul cărora acest lucru este posibil sunt următoarele :
"SHOW TABLES;" //cu care vizualizăm tabele le din bază și mai apoi le stocăm în variabila ‘tables’
"SELECT * FROM {0};" //cu care extragem informațiile din fiecare tabel stocat în variabila ‘tables’ .
Prin intermediul variabilei ‘cd’, datele vor fi exportate în fișierul Excel, cu numele ‘db_export ’ care
va fi localizat în aceeași cale cu fișierul sursă Python ‘ data_extract.py ’.
40
Figura 3.13 Localizarea fișierului de tip xlsx
3.2.2 Algoritm ii de predicție
Așa cum este menționat în secțiunea Eroare! Fără sursă de referință. , algoritmul de predicție
scris în limbajul Python, salvat în fișierul data_prediction.py (vezi ANEXA 3) începe cu procurare
datelor din fișierul Excel creat în secțiunea 3.2.1.2 pe care le voi stoca într -un model de date pe care
urmează să îl prelucrez mai departe în algoritm.
Pentru o înțelegere mai ușoară a codului, am creat diagrama software a acestuia, ale cărei etape o să
le detaliez ulterior. Ea se regăsește în Figura 3.14.
Figura 3.14 Diagrama software
41
Pentru început voi construi matric ea de corelație . Matricea de corelație este un tabel care arată
coeficienții de corelație dintre variabile . Fiecare celulă din tabel arată corelația dintre două variabile .
Matricea de corelație este utilizată ca mod de sumarizare a datelor și ca o introducere în analiza
avansată a acestora. [25]
De obicei, matricea de corelație este pătratică, cu același număr de linii și de coloane. Linia de 1
începe din colțul din s tânga sus, până în dreapta jos, ca diagonală principală, ea arătând că fiecare
variabilă se corelează perfect cu ea însăși. Aceast ă matrice este simetrică, cu aceeași valoare a
corelației deasupra și dedesubtul diagonalei principale, în oglindă , ca în Figura 3.15.
42
Figura 3.15 Matricea de corelație a câmpurilor din stats_db
43
Figura 3.15 este rezultatul următoarelor instrucțiuni:
df = pd.read_excel("db_export.xlsx ")
df.head()
df.info()
df['target'] = df['y'].apply(lambda x: 1 if x == 'yes' else 0)
df.target.value_counts()
df.drop('y',axis=1,inplace=True)
df.target.value_counts()/len(df)
df.describe()
df.dtypes
corr = df.corr()
sns.heatmap(corr, xticklabels=corr.columns, yticklabels=corr.columns)
plt.show()
În continuare urmează preprocesarea datelor. Debarasarea datelor (data binning) este o tehnică de
preprocesare a datelor utilizată pentrua reduce efectele erorilor minore de observație. Datele originale
care se află într -un interval mi c sunt î nlocuite cu o valoare reprezentativă din acest interval , de multe
ori valoarea central. Este o formă de cuantizare. Acest proces este efectuat de obicei înaintea
algoritmului de regresie liniara. Funcțiile de binning sunt:
def mono_bin(Y, X, n = max_bin)
def char_bin(Y, X)
În cadrul funcți ei mono_bin (sau monotonic binning) am calculat o serie de me dii care tind spre o
valoare medie de predicție , iar precizia este dată de influența tuturor parametrilor. Este o fun cție de
determinare a monotoniei, iar datele sunt grupate în intervale numerice.
Funcțiile de data binning pot fi aplicate și pentru grupuri de caractere. De aceea, în funcția char_bin,
diferit față de cazul anterior este faptul că datele nu mai sunt împărțite în grupuri de câte n date (vezi
ANEXA 3) , ci după tipul lor , informații stocate în variabila X . Mediile calculate la acest pas sunt
stocate în aceeași variabilă ca cele de la pasul anterior.
Algoritmul de binning salvează variabilele de intrare din setul de date și creează un gra fic bivariat
(analiz ă bivariată = una dintre cele mai simple analize cantitative care folosește două variabile , de
obicei notate cu X și Y ) (intrare vs. țintă). De exe mplu, pentru Figura 3.16 valorile din partea de jos
a graficului reprezintă valoarea de început a inter valelor obținute în urma algoritmului de binning.
Figura 3.16 Rezultat al preprocesării datelor
44
În continuare va avea loc procesul de selecție a variabilelor. Acest proces este bazat pe un sistem de
votare, așa cum menționam în secțiunea 2.2.1 .
Voi utiliza o serie de algoritmi diferiți (Informații ale variabilelor – IV – Infomation Value, Metoda
Pădurilor Aleatoare – Random Forest Cla ssifier, Metoda Arborilor Suplimentari – ExtraTrees
Classifier , Patratul Chi – Chi Square ) pentru a selecta caracteristici și apoi în final fiecare algoritm
votează pentru caracteristica aleasă. Voi exporta rezultatele votului pentru fiecare algoritm în fișiere
Excel și apoi le voi îmbina într -un singur tabel în care voi număra voturile pentru a lua decizia finală .
Tabelul 5 Rezultatele votului IV
Tabelul 6 Rezultatele votului Random Forests
Tabelul 7 Rezultatul votului ExtraTrees
Tabelul 8 Rezultatul votului Chi Square
45
Numărul de voturi finale este folosit pentru a selecta cea mai bună caracteristică pentru modelarea
datelor.
Tabelul 9 Rezultatele tuturor voturilor
Mai departe, pentru a clasifica cele mai favorabile rezultate, vom considera pentru calculul scorului
final calificativul 1 dac ă parametrul se află în top 5 pentru algoritmul respectiv și 0 dacă nu. Acest
lucru este detaliat în Tabelul 10.
Tabelul 10 Scorul final
Datele din acest tabel care conține scorul final sunt filtrate după condiția ca scorul să fie mai mare
sau egal cu 2 și factorul de varianță a inflației mai mare decât 10 . În statistici, factorul de varianță a
46
inflației (VIF) este raportul de variație într -un model cu termeni mu ltipli, împărțit prin varianța unui
model cu un singur termen.
features = features[list(score_table[score_table['final_score'] >= 2]['index'])]
vif = calculate_vif(features)
while vif['VIF'][vif['VIF'] > 10].any():
remove = vif.sort_values('VIF',ascending=0)['Features'][:1]
features.drop(remove,axis=1,inplace=True)
vif = calculate_vif(features)
list(vif['Features'])
Rezu ltatul filtrării este următorul :
['eNBcellConfig0dlBandwidth',
'total_bytes_sdus_u l',
'total_bytes_sdus_dl',
'eNBcellConfig0siConfigsfn',
'eNBcellConfig0ulPuschPower',
'eNBcellConfig0ulFreq',
'LClcUeConfig0rnti',
'eNBcellConfig0dlFreq']
Așadar, acesta este grupul de parametri pe baza cărora se vor efectua predicțiile.
Deși lucrul pare aproape terminat, mai departe va avea loc modelarea datelor. Pentru aceasta voi
împărți setul de date în date de învățare și date de test și voi încerca performanțele unei serii de
algortimi dintre care îl voi alege pe cel mai precis . Din totalul de date, un procent de 60% va fi dedicat
învățării și 40% va fi dedicat testării.
Voi aplica algoritmii pe setul de date de învățare și voi evalua performanța lor pe setul de date de test
pentru a mă asigura că modelul este stabil. Am ales spre an aliza modelele : Pădurile Aleatoare
(Random Forest), Regresie Logistică (Logistic Regression) și Variația creșterii (Gradient Boosting).
a) Algoritmul pădurilor aleatoare oferă următoarele performanțe :
Precizia pentru datele de învățare: 95.45454545454545 %
Precizia pentru datele de test: 62.5 %
Aria de sub grafic pentru datele de învățare: 100.0 %
Aria de sub grafic pentru datele de test: 41.02564102564103 %
Tabelul 11 Predicții pe datele de învățare
PREZIS 0 1
ACTUAL
0 5 0
1 1 16
Tabelul 12 Predicții pe datele de test
PREZIS 0 1
ACTUAL
0 1 2
1 4 9
b) Algoritmul variației creșterii oferă următoarele performanțe :
Precizia pentru datele de învățare: 100.0 %
Precizia pentru datele de test: 68.75 %
Aria de sub grafic pentru datele de învățare : 100.0 %
Aria de sub grafic pentru datele de test: 63.63636363636365 %
47
Tabelul 13 Predicții pe datele de învățare
PREZIS 0 1
ACTUAL
0 3 0
1 0 19
Tabelul 14 Predicții pe datele de test
PREZIS 0 1
ACTUAL
0 1 4
1 1 10
c) Algoritmul regresiei liniare oferă următoarele performanțe :
Precizia pentru datele de învățare: 86.36363636363636 %
Precizia pentru datele de test: 62.5 %
Aria de sub grafic pentru datele de învățare: 57.89473684210527 %
Aria de sub grafic pentru datele de test: 74.54545454545455 %
Tabelul 15 Predicții pe datele de învățare
PREZIS 0 1
ACTUAL
0 3 0
1 0 19
Tabelul 16 Predicții pe datele de test
PREZIS 0 1
ACTUAL
0 0 5
1 1 10
În continuare, voi decurge la reglarea performanței pentru primele două modele de algoritmi, iar
rezultatele sunt afișate mai jos :
a) Precizia pentru datele de învățare: 86.36363636363636 %
Precizia pentru datele de test: 68.75 %
Aria de sub grafic pentru datele de învățare : 97.36842105263158 %
Aria de sub grafic pentru datele de test: 51.81818181818182 %
b) Precizia pentru datele de învățare: 95.45454545454546 %
Precizia pentru datele de test: 75 %
Aria de sub grafic pentru datele de învățare : 100 %
Aria de sub grafic pentru datele de test: 65.45454545454545 %
Atunci când dorim să alegem cel mai precis algoritm de predicție pentru setul de date de care
dispunem, ținem cont de aspectul curbei ROC și de aria graficului delimitat de aceasta.
Figura 3.17 Curba ROC – Pădurile aleatoare
48
Figura 3.18 Curba ROC – Regresia logistică
Figura 3.19 Curba ROC – Variația creșterii
Așadar, analizând rezultatele, modelul ales va fi cel al variației creșterii (Gradient Boosting) .
3.2.3 Vizualizarea rezultatelor
Pentru a filtra mai ușor rezultatele pe care dorim să le vizualizăm, am dezvoltat în Qlik Sense o
aplicație care importă valoril e generate de algoritmii de predicție și le transpune sub formă grafică.
În prima pagină a aplicației vor fi afișate rezultatele voturilor diferiților algoritmi aplicați.
49
Figura 3.20 Rezultatele votului afișate în Qlik Sense
În jumătatea de sus a paginii vor fi afișate rezultatele pentru fiecare algortim de votare, în funcție de
selecția filtrului din stânga și totodată datele vor fi ordonate descrescător. Pentru graficul “ Rezultatel e
în funcție de algoritmul de votare ” am ales s ă exclud valorile nule, pentru a fi scalate mai ușor celelalte
valori semnificative, iar în graficul „ Scorul final pentru fiecare variabilă ” pot fi vizualizate și cele
nule, navigând cu bara din partea dreaptă a acestuia.
Tot aici, dacă selectăm unul dintre indecși, vor fi afișate individualizat pentru acesta toate statisticile
disponibile în pagină, așa cum urmează în Figura 3.21.
Figura 3.21 Rezultatele filtrate per index
50
Cu alte cuvinte, rezultatele prezentate anterior sunt cele dinaintea aplicării algortimului de p redicție,
din etapa de pregătire a datelor. În continuare , voi prezenta rezultat ele obținute după aplicarea
algoritmului de predicție pe datele de învățare .
În graficul comparativ ‘Actual vs Predic ție’, curba corespunzătoare comportamentului actual conține
înregistrări colectate din rețea la fiecare jumătate de minut, timp de 18min și 30s, iar predicția se va
face pentru următoarea jumătate de minut 18m:30s – 19m:00s. Unele dintre rezultatele reale au o
distribuție diferită față de cea predictivă din cauza faptului că în algoritmii de predicție sunt incluse
unele câmpuri care sunt populate întotdeauna sau care nu au un impact imens asupra distribuției.
Următoarea figură, cea a câștigului arată procentul din numărul de cazuri dintr -o anumită categorie
raportat la un procent din numărul to tal de cazuri. În cazul de față, categoria din care luăm seturi de
valori este categoria TARGET. De exemplu, primul pun ct al curbei (30%, 4 1%) pentru valorile de 1
ale categoriei TARGET arată că dacă luăm un procent de 30% din date pe baza căruia aplicăm
algoritmul de predicție și apoi le sortăm după probabilitatea de a avea 1 ca valoare a câmpului
TARGET, ne așteptăm ca p rinter aceste valori să regăsim aproximativ 41% din toate cazurile care
vor lua de fapt valoare 1. În mod similar, primele 50% dintre valori ar conține aproximativ 65% din
cazurile care vor lua valoarea 1 a câmpului TARGET.
Linia diagonală este curba de ba ză. Ea indică faptul că dacă selectăm la întâmplare 10% dintre valorile
din setul de date , ne așteptăm să regăsim printre acestea aproximativ 10% dintre toate cazurile care
conțin valoarea 1 în câmpul TARGET.
Așadar, ținând cont de aceste două aspecte, put em afirma faptul că vom obține un câștig mai bun cu
cât linia curbată se va depărta mai mult de linia de bază.
Diagrama de eficiență este derivată din curba câștigurilor. Valorile de pe axa ‘y’ corespund raportului
dintre câștigul cumulativ și linia de ba ză. Astfel, la 30% eficiența pentru categoria TARGET este de
51
41% / 30% = 1.36 . Putem spune că această diagramă este un alt mod de a privi informațiile din
graficul câștigurilor cumulative.
În continuare, se pot oferi aceleași interpretări pe rezultatele obținute în urma aplicării algoritmului
pe datele de test, care arată ca în figura următoare.
Într-adevăr, rezultatele obținute în acest caz sunt mai nefavorabile decât cele obținute anterior, însă
trebuie să ținem cont și de faptul că datele de test sunt într -un procent de 40% din total, în timp ce
datele de învățare reprezintă 60% . Astfel, rezultatele sunt destul de convenabile pentru o cantitate
seminificiativă de date. Putem afirma deci, că algoritmul predictiv și -a atins scopul.
52
53
Capitolul 4 Soluții de îm bunătățire a p erformanței
După cum am văzut în Capitolul 3 , secțiunea 3.2.2 , parametri care influențează într -o proporție mare
comportamentul rețelei, sunt următorii :
['eNBcellConfig0dlBandwidth',
'total_bytes_sdus_ul',
'total_bytes_sdus_dl',
'eNBcellConfig0siConfigsfn',
'eNBcellConfig0ulPuschPower',
'eNBcellConfig0ulFreq',
'LClcUeConfig0rnti',
'eNBcellConfig0dlFreq']
Mai departe voi prezenta câteva soluții prin care putem obține performanțe mult mai bune ale rețelei,
ajustând valorile acestor parametri.
• Când vine vorba despre lățimea de bandă, putem afirma faptul că în aceleași condiții, pentru
mai multe dispozitive, capacitatea de descărcare/încărcare din/în rețea este direct
proporțională cu lățimea de bandă . Acest fenomen este întâlnit rareori în practică deoarece
traficul pe care îl realizea ză un utilizator în rețea depinde foarte mult de activitățile pe care
acesta le întreprinde.
De exemplu, atunci când citim informații de pe wikipedia, cantitatea de bytes de care avem
nevoie este una mică, însă atunci când dorim să vizualizăm un videoclip pe youtube la calitate
HD, cantitatea de bytes pe care o solicităm pe calea descendentă din rețea este mult mai mare.
În cazul acestor activități este posibil ca utilizatorul care accesează site -ul wikipedia să aibă
capacitatea de a descărca mult mai multă informație decât o face, iar celui care accesează
youtube să nu îi fie suficientă capacitatea de descărcare. În soluționarea acestei probleme vine
alocarea lărgimii de bandă și anume mărimi de până la 20 MHz acolo unde traficul creat de
utilizator este un ul mare, iar mărimi mult mai mici în celălalt caz.
• O altă metodă pentru a îmbunătăți performanța rețelei de date este de a schimba modul de
duplexare. În LTE există două moduri de duplexare – FDD și TDD (Frequency Division
Duplexing și Time Division Dupl exing – Duplexarea cu divizare în frecvență și Duplexarea
cu divizare în timp).
Figura 4.1 Moduri de duplexare în LTE
54
FDD este un sistem de duplexare întreg (full), spre deosebire de TDD care este un sistem de
duplexare înjumătățit (half), ceea ce înseamnă că în cazul FDD va fi posibilă descărcarea și
încărcarea în același moment de timp, pe când în TDD se va alege pentru un moment de timp
ori încărcarea ori descărcarea. Cu alte cuvinte, căile din FDD împart același moment de timp,
iar căile din TDD împart aceeași frecvență.
Pentru a avea o eficiență cât mai bună în gestionarea situațiilor de descărcare/încărcare este
recomandat să se utilizeze duplexarea în timp deoarece în acest caz pot fi configurate care
dintre intervalele de timp să fie folosite pentru încărcare și care pentru descărcare. De
exemplu, dacă într -o companie se utilizează foarte mult procesul de încărcare pe un server,
atunci se va folosi o configurare a TDD ce conține mai multe subcadre de încărcare decât
pentru descărcare, însă în cazul unui cinematograf în care să presupunem că vizualizare
filmelor se va face în mediul online, avem nevoie ca majoritatea cadrelor să fie de tip
descărcare.
Posibilele metode de configurare se regăsesc în Tabelul 17.
Tabelul 17 Configurarea TDD
Se observă că în Tabelul 17 pe lângă subcadrele de încărcare (U) și cele de descărcare (D)
apare și un cadru S, numit cadru special, care reprezintă p erioada de tranziție dintre cadrele U
și cadrele D.
• Puterea PUSCH este parametrul prin care îi impunem UE -ului cu ce putere să emită pe canalul
de încărcare. Pentru a maximiza capacitatea de încărcare este necesară scăderea interferențelor
care este posib ilă prin ajustarea puterii PUSCH. Dacă avem o valoare mare a puterii PUSCH,
avem și o arie mare de acoperire pentru procesul de încărcare (uplink), însă acest aspect nu
este tocmai unul favorabil deoarece în acest mod apare un zgomot cât mai mare generat de
utilizatorii care se află la o distanță mare de stație și pot fi deserviți de o stație mai apropiată
de aceștia. În cazul contrar, atunci când avem o valoare mică a puterii PUSCH este posibil să
nu putem deservi toți utilizatorii care se află în apropie rea stației. De aceea, puterea PUSCH
trebuie aleasă într -un interval în care pot fi deserviți toți utilizatorii arondați stației respective
și privați de accesul de încărcare toți utilizatorii care ar introduce zgomot și pot fi deserviți de
o altă stație m ai apropiată.
55
• Frecvența este un alt parametru care influențează într -o mare măsură performanța rețelei LTE.
De aceea putem lua în discuție alocarea frecvențelor ca o variantă de îmbunătățire a
performanței.
Știm că puterea recepționată de UE depinde inve rs proporțional de frecvență, cu cât frecvența
este mai mare, cu atât puterea recepționată este mai mică , însă în aceste condiții nu putem
aloca pentru toți utilizatorii frecvența de 800MHz. De aceea, sunt declarate anumite valori de
prag pentru care se va utiliza una din valorile 800MHz, 1800MHz, 2600MHz, frecvente
corespunzătoare LTE.
Schemele de modulație corespunzătoare acestor frecvențe sunt : QPSK, 16QAM, 64QAM și
sunt alocate ca în Figura 4.2.
Figura 4.2 Schemele de modulație din LTE
Despre ele se știe că 64QAM oferă o rată de 6biți/s , 16QAM oferă o rată de 4 biți/s, iar
QPSK 2 biți/s.
Așadar, pentru utilizatorii din zona cea mai apropiată a stației, deși puterea este una mică,
schema de modulație este una mare și astfel viteza de încărcare/descărcare în/din rețea este
una mare, iar pentru cei care se află în celelalte 2 zone de lângă stație, ce le două viteze vor
scădea odată cu creșterea distanței față de stație.
Astfel, ținând cont de cele menționate anterior, performanța rețelei poate fi îmbunătățită prin
alegerea corespunzătoare a pragurilor conform cărora are loc alocarea frecvențelor.
56
57
Concluzii
Problema îmbunătățirii performanțelor unei rețele de comunic ații mobile reprezint ă un su biect de
actualitate , urmărit de orice furnizor de servicii mobile.
Așa cum mi -am pro pus în introducere, în urma modelului predictiv aplicat setului de date de care am
dispus, am reu șit să identific eventualele degradării din rețeaua LTE și parametri i care au influențat
acest e fenomene.
Lucrarea îmbin ă trei mari arii ale tehnologiei informați ei – baze de date, progra mare și analiza datel or.
Sunt de părere că mod ul de lucru a fost ușurat prin utilizare a limb ajului de progra mare Python
deoarece mi-a permis accesul rapid la date le din baza de date , oferă spre dezvo ltare metode deja
definite pentru al goritmi i predictiv i utilizați frecvent și totodată oferă posi bilitatea de a accesa
rezultatele intermediare ale întregului proces deoarece instrucțiunile sunt executate pe r ând, fiind un
limbaj de programare interpre tat.
Referitor tot la modul de lucru, v izualizarea rezultat elor a fost mult mai prietenoasă prin folosirea
utilitarului Qlik Sense , ținând cont de faptul că este creat special pentru aplicații din domeniul știin ței
și analizei datelor .
Modelele de algo ritmi predictiv i nu se potrivesc oricărui set de date , de aceea est e recomandat ca
atunci c ând dorim să aplicăm unul dintre aceste modele peste datele noa stre, să anal izăm
perfo rmanț ele pe care le oferă mai multe dintre aceste. Prin per formanțe mă refer la precizie, câștig,
eficiență, curba ROC și aria acoperită de aceas ta.
Printre parametri i care influen țează în mod considerabil rețeaua LTE se numă ră frecvența, lă țimea de
bandă, cantitatea de informație încărcat ă/descărcată de către utilizator și puterea recepționată de
echipamentul utilizatorul ui. Este de preferat ca d imensionarea parametrilor de confi gurare ai re țelei
se efectueaz ă în funcție de condi țiile în care se află utilizator ul și mai ales de nevoile sale , însă evident
că acest lucru nu poate fi realizat în mod individual , ci particularizat pe un grup de utilizatori care se
află în aceleași condi ții. Din punctul de vedere al experien ței pe care o are ut ilizatorul din partea
rețelei , trebuie să ne gân dim la faptul că soluți ile de evi tare a congesti ei trebuie implementat e mai
ales în timpul orelor celor mai aglomerate din zi deoarece traficul urmă rește zilnic aproxi mativ același
model din punct de vedere cantitativ .
Dacă o să am posibilitatea, îmi doresc ca pe viitor să adaptez modelul în așa fel înc ât să trateze seturi
mult mai mari de date și să fac posibilă implementarea soluțiilor de îmbunătă țire în timp cât s e poate
de real deoarece este ușor de intuit că în continua schimbare în car e ne aflăm din punctul de vedere
al evoluției te hnologiei, se urmărește automatizarea a din c e în ce mai multe procese.
58
59
Bibliografie
[1] https://study.com/academy/lesson/mobile -networking -definition -components -comparison.html
(accesat la data: 26.02.2019)
[2] https://www.tnuda.org.il/en/physics -radiation/radio -frequency -rf-radiation/cellular –
communication -network -technologies (accesat la data : 26.02.2019)
[3] https ://www.researchgate.net/figure/Frequency -reuse -3-model -in-GSM_fig1_282601918
(accesat la data : 03.03.2019)
[4] Upkar Varshney, Georgia State University, “4G Wireless Networks”, în IT Pro /Septembrie –
Octombrie 2012
[5] https://www.tutorialspoint.com/cdma (accesat la data: 13.03.2019)
[6] G. Brindha, “Comparison of PAPR Analysis for OFDMA and SC -FDMA in LTE Systems”, în
International Journal Engineering Innovation & Research , Volume 2, Issue 2
[7] Rakesh Kuma r Singh, Ranjan Singh, “4G LTE Cellular Technology: Network Architecture and
Mobile Standards”, în International Journal of Emerging Research in Management & Technology /
Decembrie 2016
[8] Prof. Bogdan Mocanu, Cursul de Rețele de Comunicații, UPB, 2018
[9]http://www.cse.unt.edu/~rdantu/FALL_2013_WIRELESS_NETWORKS/LTE_Alcatel_White_P
aper.pdf (accesat la data : 17.03.2019)
[10] Prof. Bogdan Mocanu, Cursul d e Baze de Date, UPB, 2018
[11] https://forum.huawei.com/enterprise/en/Downlink -Power -Allocation -in-LTE/thread/457683 –
100305 (accesat la data 16.06. 2019)
[12] Bilal Muhammad and Abbas Mohammed, Physical Uplink SharedChannel (PUSCH)Closed –
Loop PowerControl for 3G LTE, Ianuarie 2010
[13] https://dsp.s tackexchange.com/questions/38256/system -frame -number -in-lte-specifications
(accesat la data: 16.06.2019)
[14] http://www.telecomabc.com/i/imsi.html (accesat la data: 16.06.2019)
[15] http://howltestuffworks.blogspot.com/2014/06/rntis -in-lte.html (accesat la data: 16.06.2019)
[16] Bishop, C. M., Pattern Recognition and Machine Learning, Springer, 2006
[17] https://www.datacamp.com/community/tutorials/random -forests -classifier -python (accesat la
data: 06.04.2019)
[18] Marianne Fjelberg, The Royal Institute of Technolog y, “Predicting data traffic in cellular data
networks” , Iunie 2015
[19] https://www.geeksforgeeks.org/understanding -logistic -regression/ (accesat la data: 12.06.2019)
[20] https://mwc.gr/presentations/2017/konstantinou.pdf (accesat la data: 16.06.2019)
[21] https://towardsdatascience.com/what -is-the-best-programming -language -for-machine -learning –
a745c156d6b7 (accesat la data : 31.03.2019)
[22] https://dev.mysql.com/doc/workbench/en/ (accesat la data: 24.04.2019)
[23] https://docs.spyder -ide.org/ (accesat la data: 11.05.2019)
[24] https://help.qlik.com/en -US/sense/April2019/Content/Sense_Helpsites/Home.htm (accesat la
data: 03.06.2019 )
[25] https://www.displayr.com/what -is-a-correlation -matrix/ (accesat la data: 16.05.2019)
60
61
ANEXA 1
create database stats_db ;
use stats_db;
drop table mytable;
CREATE TABLE mytable(
bs_id BIGINT
,agent_info0agent_id BIGINT
,agent_info0bs_id BIGINT
,agent_info0capabilities0 VARCHAR(5)
,agent_info0capabilities1 VARCHAR(5)
,agent_info0capabilities2 VARCHAR(5)
,agent_info0capab ilities3 VARCHAR(5)
,agent_info0capabilities4 VARCHAR(3)
,agent_info0capabilities5 VARCHAR(4)
,agent_info0capabilities6 VARCHAR(4)
,agent_info0capabilities7 VARCHAR(3)
,eNBheaderversion BIT
,eNBheadertype BIGINT
,eNBheaderxid BIT
,eNBeNBId BIGINT
,eNBcellConfig0phyCellId BIT
,eNBcellConfig0cellId BIT
,eNBcellConfig0puschHoppingOffset BIT
,eNBcellConfig0hoppingMode BIT
,eNBcellConfig0nSb BIT
,eNBcellConfig0phichResource BIT
,eNBcellConfig0phichDuration BIT
,eNBcellConfig0init NrPDCCHOFDMSym BIT
,eNBcellConfig0siConfigsfn BIGINT
,eNBcellConfig0siConfigsib1Length BIGINT
,eNBcellConfig0siConfigsiWindowLength BIGINT
,eNBcellConfig0dlBandw idth BIGINT
,eNBcellConfig0ulBandwidth BIGINT
,eNBcellConfig0ulCyclicPrefixLength BIGINT
,eNBcellConfig0dlCyclicPrefixLength BIGINT
,eNBcellConfig0antenna PortsCount BIGINT
,eNBcellConfig0duplexMode BIT
,eNBcellConfig0subframeAssignment BIT
,eNBcellConfig0specialSubframePatterns BIT
,eNBcellConfig0prachConfigIndex BIT
,eNBcellConfig0prachFreqOffset BIGINT
,eNBcellConfig0raResponseWindowSize BIGINT
,eNBcellConfig0macContentionResolutionTimer BIGINT
,eNBcellConfig0maxHARQMsg3Tx BIT
,eNBcellConfig0n1PUCCHAN BIT
,eNBcellConfig0deltaPUCCHShift BIT
,eNBcellConfig0nRBCqi BIT
,eNBcellConfig0srsSubframeConfig BIT
,eNBcellConfig0srsBwConfig BIT
,eNBcellConfig0srsMacUpPts BIT
,eNBcellConfig0enable64QAM BIGINT
,eNBcellConfig0carrierIndex BIT
,eNBcellConfig0dlFreq BIGINT
,eNBcellConfig0ulFreq BIGINT
,eNBcellConfig0eutraBand BIGINT
,eNBcellConfig0dlPdschPower BIGINT
,eNBcellConfig0ulPuschPower BIGINT
,eNBcellConfig0sliceConfigdl0id BIGINT
,eNBcellConfig0sliceConfigdl0label VARCHAR(4)
,eNBcellConfig0sliceConfigdl0percentage BIGINT
,eNBcellConfig0sliceConfigdl0isolation VARCHAR(5)
62
,eNBcellConfig0sliceConfigdl0priority BIGINT
,eNBcellConfig0sliceConfigdl0positionLow BIT
,eNBcellConfig0sliceConfigdl0positionHigh BIGINT
,eNBcellConfig0sliceConfigdl0maxmcs BIGINT
,eNBcellConfig0sliceConfigdl0sorting0 VARCHAR(8)
,eNBcellConfig0sliceConfigdl0sorting1 VARCHAR (8)
,eNBcellConfig0sliceConfigdl0sorting2 VARCHAR(6)
,eNBcellConfig0sliceConfigdl0sorting3 VARCHAR(5)
,eNBcellConfig0sliceConfigdl0sorting4 VARCHAR(6)
,eNBcellConfig0sliceConfigdl0sorting5 VARCHAR(6)
,eNBcellConfig0sliceConfigdl0accounting VARCHAR(8)
,eNBcellConfig0sliceConfigdl0schedulerName VARCHAR(16)
,eNBcellConfig0sliceConfigul0id BIT
,eNBcellConfig0sliceConfigul0label VARCHAR(4)
,eNBcellConfig0sliceConfigul0percentage BIGINT
,eNBcellConfig0sliceConfigul0isolation VARCHAR(5)
,eNBcellConfig0sliceConfigul0priority BIT
,eNBcellConfig0sliceConfigul0firstRb BIT
,eNBcellConfig0sliceConfigul0maxmcs BIGINT
,eNBcellConfig0sliceConfigul0accounting VARCHAR(9)
,eNBcellConfig0sliceConfigul0schedulerName VARCHAR(19 )
,eNBcellConfig0sliceConfigintrasliceShareActive VARCHAR(4)
,eNBcellConfig0sliceConfigintersliceShareActive VARCHAR(4)
,UEueConfig0rnti BIGINT
,UEueConfig0timeAlignmentTimer BIGINT
,UEueConfig0transmissionMode BIT
,UEueConfig0ueAggregatedMaxBitrateUL BIT
,UEueConfig0ueAggregatedMaxBitrateDL BIT
,UEueConfig0capabilitieshalfDuplex BIT
,UEueConfig0capabilitiesintraSFHopping BIT
,UEueConfig0capabilitiestype2Sb1 BIT
,UEueConfig0capabilitiesueCategory BIGINT
,UEueConfig0capabilitiesresAllocType1 BIT
,UEueConf ig0ueTransmissionAntenna BIGINT
,UEueConfig0ttiBundling BIT
,UEueConfig0maxHARQTx BIGINT
,UEueConfig0betaOffsetACKIndex BIT
,UEueConfig0bet aOffsetRIIndex BIT
,UEueConfig0betaOffsetCQIIndex BIGINT
,UEueConfig0ackNackSimultaneousTrans BIT
,UEueConfig0simultaneousAckNackCqi BIT
,UEueConfig0aperiodicCqi RepMode BIGINT
,UEueConfig0ackNackRepetitionFactor BIT
,UEueConfig0pcellCarrierIndex BIT
,UEueConfig0imsi BIGINT
,UEueConfig0dlSliceId BIT
,UEueConfig0ulSliceId BIT
,LCheaderversion BIT
,LCheadertype BIGINT
,LCheaderxid BIT
,LClcUeConfig0rnti BIGINT
,LClcUeConfig0lcConfig0lcid BIT
,LClcUeConfig0lcConfig0lcg BIT
,LClcUeConfig0lc Config0direction BIGINT
,LClcUeConfig0lcConfig0qosBearerType BIT
,LClcUeConfig0lcConfig0qci BIT
,LClcUeConfig0lcConfig1lcid BIGINT
,LClcUeConfig0lcConfig 1lcg BIT
,LClcUeConfig0lcConfig1direction BIGINT
,LClcUeConfig0lcConfig1qosBearerType BIT
,LClcUeConfig0lcConfig1qci BIT
,LClcUeConfig0lcConfig2lcid BIGINT
,LClcUeConfig0lcConfig2lcg BIT
63
,LClcUeConfig0lcConfig2direction BIT
,LClcUeConfig0lcConfig2qosBearerType BIT
,LClcUeConfig0lcConfig2qci BIT
,total_bytes_sdus_ul BIGINT
,total_bytes_sdus_dl BIGINT
,y VARCHAR(3)
);
INSERT INTO mytable
(`bs_id`,`agent_info0agent_id`,`agent_info0bs_id`,`agent_info0capabilities0`,`ag
ent_info0capabilitie s1`,`agent_info0capabilities2`,`agent_info0capabilities3`,`a
gent_info0capabilities4`,`agent_info0capabilities5`,`agent_info0capabilities6`,`
agent_info0capabilities7`,`eNBheaderversion`,`eNBheadertype`,`eNBheaderxid`,`eNB
eNBId`,`eNBcellConfig0phyCellId`,`eN BcellConfig0cellId`,`eNBcellConfig0puschHopp
ingOffset`,`eNBcellConfig0hoppingMode`,`eNBcellConfig0nSb`,`eNBcellConfig0phichR
esource`,`eNBcellConfig0phichDuration`,`eNBcellConfig0initNrPDCCHOFDMSym`,`eNBce
llConfig0siConfigsfn`,`eNBcellConfig0siConfigsib1Len gth`,`eNBcellConfig0siConfig
siWindowLength`,`eNBcellConfig0dlBandwidth`,`eNBcellConfig0ulBandwidth`,`eNBcell
Config0ulCyclicPrefixLength`,`eNBcellConfig0dlCyclicPrefixLength`,`eNBcellConfig
0antennaPortsCount`,`eNBcellConfig0duplexMode`,`eNBcellConfig0subfra meAssignment
`,`eNBcellConfig0specialSubframePatterns`,`eNBcellConfig0prachConfigIndex`,`eNBc
ellConfig0prachFreqOffset`,`eNBcellConfig0raResponseWindowSize`,`eNBcellConfig0m
acContentionResolutionTimer`,`eNBcellConfig0maxHARQMsg3Tx`,`eNBcellConfig0n1PUCC
HAN`,`eNBcellConfig0deltaPUCCHShift`,`eNBcellConfig0nRBCqi`,`eNBcellConfig0srsSu
bframeConfig`,`eNBcellConfig0srsBwConfig`,`eNBcellConfig0srsMacUpPts`,`eNBcellCo
nfig0enable64QAM`,`eNBcellConfig0carrierIndex`,`eNBcellConfig0dlFreq`,`eNBcellCo
nfig0ulFreq`,`eNBcel lConfig0eutraBand`,`eNBcellConfig0dlPdschPower`,`eNBcellConf
ig0ulPuschPower`,`eNBcellConfig0sliceConfigdl0id`,`eNBcellConfig0sliceConfigdl0l
abel`,`eNBcellConfig0sliceConfigdl0percentage`,`eNBcellConfig0sliceConfigdl0isol
ation`,`eNBcellConfig0sliceConfigdl0 priority`,`eNBcellConfig0sliceConfigdl0posit
ionLow`,`eNBcellConfig0sliceConfigdl0positionHigh`,`eNBcellConfig0sliceConfigdl0
maxmcs`,`eNBcellConfig0sliceConfigdl0sorting0`,`eNBcellConfig0sliceConfigdl0sort
ing1`,`eNBcellConfig0sliceConfigdl0sorting2`,`eNBcel lConfig0sliceConfigdl0sortin
g3`,`eNBcellConfig0sliceConfigdl0sorting4`,`eNBcellConfig0sliceConfigdl0sorting5
`,`eNBcellConfig0sliceConfigdl0accounting`,`eNBcellConfig0sliceConfigdl0schedule
rName`,`eNBcellConfig0sliceConfigul0id`,`eNBcellConfig0sliceConfigul 0label`,`eNB
cellConfig0sliceConfigul0percentage`,`eNBcellConfig0sliceConfigul0isolation`,`eN
BcellConfig0sliceConfigul0priority`,`eNBcellConfig0sliceConfigul0firstRb`,`eNBce
llConfig0sliceConfigul0maxmcs`,`eNBcellConfig0sliceConfigul0accounting`,`eNBcell
Config0sliceConfigul0schedulerName`,`eNBcellConfig0sliceConfigintrasliceShareAct
ive`,`eNBcellConfig0sliceConfigintersliceShareActive`,`UEueConfig0rnti`,`UEueCon
fig0timeAlignmentTimer`,`UEueConfig0transmissionMode`,`UEueConfig0ueAggregatedMa
xBitrateUL`,`UEueCon fig0ueAggregatedMaxBitrateDL`,`UEueConfig0capabilitieshalfDu
plex`,`UEueConfig0capabilitiesintraSFHopping`,`UEueConfig0capabilitiestype2Sb1`,
`UEueConfig0capabilitiesueCategory`,`UEueConfig0capabilitiesresAllocType1`,`UEue
Config0ueTransmissionAntenna`,`UEueC onfig0ttiBundling`,`UEueConfig0maxHARQTx`,`U
EueConfig0betaOffsetACKIndex`,`UEueConfig0betaOffsetRIIndex`,`UEueConfig0betaOff
setCQIIndex`,`UEueConfig0ackNackSimultaneousTrans`,`UEueConfig0simultaneousAckNa
ckCqi`,`UEueConfig0aperiodicCqiRepMode`,`UEueConfig0 ackNackRepetitionFactor`,`UE
ueConfig0pcellCarrierIndex`,`UEueConfig0imsi`,`UEueConfig0dlSliceId`,`UEueConfig
0ulSliceId`,`LCheaderversion`,`LCheadertype`,`LCheaderxid`,`LClcUeConfig0rnti`,`
LClcUeConfig0lcConfig0lcid`,`LClcUeConfig0lcConfig0lcg`,`LClcUeConfi g0lcConfig0d
irection`,`LClcUeConfig0lcConfig0qosBearerType`,`LClcUeConfig0lcConfig0qci`,`LCl
cUeConfig0lcConfig1lcid`,`LClcUeConfig0lcConfig1lcg`,`LClcUeConfig0lcConfig1dire
ction`,`LClcUeConfig0lcConfig1qosBearerType`,`LClcUeConfig0lcConfig1qci`,`LClcUe
Config0lcConfig2lcid`,`LClcUeConfig0lcConfig2lcg`,`LClcUeConfig0lcConfig2directi
on`,`LClcUeConfig0lcConfig2qosBearerType`,`LClcUeConfig0lcConfig2qci`,`total_byt
es_sdus_ul`,`total_bytes_sdus_dl`,`y`) VALUES
(10005,5,10005,'LOPHY','HIPHY','LOMAC','HIMAC','RLC',' PDCP','SDAP','RRC',0,8,0,2
34881024,0,0,0,0,1,0,0,1,149,17,5,25,25,0,0,1,1,0,0,0,2,7,5,0,0,1,0,0,0,0,0,0,26
85,2565,7, -27,-
96,0,'xMBB',100,'FALSE',10,0,25,28,'CR_ROUND','CR_SRB12','CR_HOL','CR_LC','CR_CQ
I','CR_LCP','POL_FAIR','schedule_ue_spec',0,'xMBB',100, 'FALSE',0,0,20,'POLU_FAIR
64
','schedule_ulsch_rnti','TRUE','TRUE',5268,7,0,0,0,0,1,1,4,1,2,0,4,0,0,8,0,0,3,0
,0,209000000000000,0,0,0,12,0,5268,1,0,2,0,1,2,0,2,0,1,3,1,1,0,1,2181380,389398,
'yes');
.
.
.
.
.
.
describe mytable;
65
ANEXA 2
data_extract.py
################################################################################
#
# Descriere: Pentru a colecta datele necesare algoritmului analitic este nevoie
# de un export in format xslx a tabelului din baza de date
# Acest cod trateaza exportul.
#
################################################################################
import os
import MySQLdb as dbapi
import pandas as pd
cd = os.path.dirname(os.path.abspath(__file__))
# Deschiderea conexiunea la baza de date
db = dbapi.connect(host='local host',user='root',passwd='root', db='stats_db')
cur = db.cursor()
# Obtinerea tabelelor
cur.execute("SHOW TABLES;")
tables = cur.fetchall()
for t in tables:
columns = []
# Importarea datelor intr -un model
df = pd.read_sql("SELECT * FROM {0};".format(t[0]), db)
# Exportarea modelului in fisier de tipul XLSX
df.to_excel(os.path.join(cd, '{0}.xlsx'.format('db_export')), index=False)
# Inchiderea cursorului si a conexiunii la baza de date
cur.close( )
db.close()
################################################################################
###################################EOF########################################
66
67
ANEXA 3
data_prediction.py
import pandas as pd
import numpy as np
import os
#####################################
#################################
#
#
#####################################
#################################
# încărcarea setului de date
cd =
os.path.dirname(os.path.abspath('__fi
le__'))
df = pd.read_excel("db_export.xlsx")
df.head()
df.info()
#####################################
#################################
# transformarea datelor
# acum datele sunt deja stocate (în
dataframe) si mai departe vom crea
coloana
# target care va contine do ar valori
de 1 și 0, functie de coloana y
df['target'] = df['y'].apply(lambda
x: 1 if x == 'yes' else 0)
# ultima coloana reprezinta coloana
target, considerand că în analiză vom
lua în
# considerare doar valorile rezultate
atunci cand telefonul este conec tat
la rețea
# S-ar putea sa existe exporturi de
parametri atunci cand nu exista un
echipament tinta.
# In acest caz, vom elimina aceste
inregistrari deoarece nu sunt de
interes.
#
df.target.value_counts()
df.drop('y',axis=1,inplace=True)
#Stare descripti va
df.target.value_counts()/len(df)
df.describe()
#df.dtypes.to_excel(os.path.join(cd,
'{0}.xlsx'.format('types')),
index=False)
import seaborn as sns
#pip install seaborn
import matplotlib.pyplot as plt
#pip install matplotlib
corr = df.corr()
sns.heatmap(corr,
xticklabels=corr.columns,
yticklabels=corr.columns)
plt.show() #afiseaza harta matricii
de corelatie – sunt afisate 50 de
campuri deoarece
#atatea campuri am de tip diferit de
'obiect'
# Selectia variabilelor
# Transformarea datelor
# Conversia campurilor de tip obiect
in numerice
from sklearn import preprocessing
from collections import defaultdict
d =
defaultdict(preprocessing.LabelEncode
r)
fit =
df.select_dtypes(include=['object']).
fillna('NA').apply(lambda x:
d[x.name].fit_transform(x))
#Convert the categorical columns
based on encoding
for i in list(d.keys()):
df[i] =
d[i].transform(df[i].fillna('NA'))
features =
df[df.columns.difference(['target'])]
labels = df['target']
features = features.fillna(0)
#features.to_excel(os.path.join(cd,
'{0}.xlsx'.format('features')),
index=False)
import pandas as pd
import pandas.core.algorithms as
algos
from pandas import Series
import scipy.stats.stats as stats
import re
import traceback
max_bin = 20
force_bin = 3
# Definirea functiilor de debarasare
(binning functions)
def mono_bin(Y, X, n = max_bin):
df1 = pd.DataFrame({"X": X, "Y":
Y})
justmiss =
df1[['X','Y']][df1.X.isnull()]
notmiss =
df1[['X','Y']][df1.X.notnull()]
r = 0
68
while np.abs(r) < 1:
try:
d1 = pd.DataFrame({"X":
notmiss.X, "Y": notmiss.Y, "Bucket":
pd.qcut(notmiss.X, n)})
# pd.qcut(notmiss.X, n)
împarte în grupuri de cate n valori,
valorile diferite de 0 ale lui X
d2 = d1.groupby('Bucket' ,
as_index=True)
r, p =
stats.spearmanr(d2.mean().X,
d2.mean().Y)
# spearman reprezinta functia de
corelatie cu acelasi nume si este
# o masura neparametrica a monotoniei
relatiei dintre doua seturi de date
# valoarea lui p indica
probabilitate a ca un sistem necorelat
sa proca seturi
# de date care au corelatia Spearman
la fel de extrema ca cea compusa din
aceste seturi de date
n = n – 1
except Exception:
n = n – 1
if len(d2) == 1:
n = force_bin
bins =
algos.quantile(notmiss.X,
np.linspace(0, 1, n))
if len(np.unique(bins)) == 2:
bins = np.insert(bins, 0,
1)
bins[1] = bins[1] –
(bins[1]/2)
d1 = pd.DataFrame({"X":
notmiss.X, "Y": notmiss.Y, "Bucket":
pd.cut(notmiss.X,
np.unique(bins),include_lowest=True)}
)
d2 = d1.groupby('Bucket',
as_index=True)
d3 = pd.DataFrame({},index=[])
d3["MIN_VALUE"] = d2.min().X
d3["MAX_VALUE"] = d2.max().X
d3["COUNT"] = d2.count().Y
d3["EVENT"] = d2 .sum().Y
d3["NONEVENT"] = d2.count().Y –
d2.sum().Y
d3=d3.reset_index(drop=True)
if len(justmiss.index) > 0:
d4 =
pd.DataFrame({'MIN_VALUE':np.nan},ind
ex=[0])
d4["MAX_VALUE"] = np.nan
d4["COUNT"] =
justmiss.count().Y
d4["EVENT"] =
justmiss.sum().Y d4["NONEVENT"] =
justmiss.count().Y – justmiss.sum().Y
d3 =
d3.append(d4,ignore_index=True)
d3["EVENT_RATE"] =
d3.EVENT/d3.COUNT
d3["NON_EVENT_RATE"] =
d3.NONEVENT/d3.COUNT
d3["DIST_EVENT"] =
d3.EVENT/d3.sum().EVENT
d3["DIST_NON_EVENT"] =
d3.NONEVENT/d3.sum().NONEVENT
d3["WOE"] =
np.log(d3.DIST_EVENT/d3.DIST_NON_EVEN
T)
# woe – weight of evidence =
metodă de evaluare a predictorilor
d3["IV"] = (d3.DIST_EVEN T-
d3.DIST_NON_EVENT)*np.log(d3.DIST_EVE
NT/d3.DIST_NON_EVENT)
# IV – information value
d3["VAR_NAME"] = "VAR"
d3 = d3[['VAR_NAME','MIN_VALUE',
'MAX_VALUE', 'COUNT', 'EVENT',
'EVENT_RATE', 'NONEVENT',
'NON_EVENT_RATE',
'DIST_EVENT','DIST_NON_EVEN T','WOE',
'IV']]
d3 = d3.replace([np.inf, –
np.inf], 0)
d3.IV = d3.IV.sum()
return(d3)
def char_bin(Y, X):
df1 = pd.DataFrame({"X": X, "Y":
Y})
justmiss =
df1[['X','Y']][df1.X.isnull()]
notmiss =
df1[['X','Y']][df1.X.notnull()]
df2 =
notmiss.groupby('X',as_index=True)
d3 = pd.DataFrame({},index=[])
d3["COUNT"] = df2.count().Y
d3["MIN_VALUE"] =
df2.sum().Y.index
d3["MAX_VALUE"] = d3["MIN_VALUE"]
d3["EVENT"] = df2.sum().Y
d3["NONEVENT"] = df2.count().Y –
df2.sum().Y
if len(justmiss.index) > 0:
d4 =
pd.DataFrame({'MIN_VALUE':np.nan},ind
ex=[0])
d4["MAX_VALUE"] = np.nan
d4["COUNT"] =
justmiss.count().Y
69
d4["EVENT"] =
justmiss.sum().Y
d4["NONEVENT"] =
justmiss.count().Y – justmiss.sum().Y
d3 =
d3.append(d4,ignore_index=True)
d3["EVENT_RATE"] =
d3.EVENT/d3.COUNT
d3["NON_EVENT_RATE"] =
d3.NONEVENT/d3.COUNT
d3["DIST_EVENT"] =
d3.EVENT/d3.sum().EVENT
d3["DIST_NON_EVENT"] =
d3.NONEVENT/d3.sum().NONEVENT
d3["WOE"] =
np.log(d3.DIST_EVENT/d3.DIST_NON_EVEN
T)
d3["IV"] = (d3.DIST_EVENT –
d3.DIST_NON_EVENT)*np.log(d3.DIST_EVE
NT/d3.DIST_NON_EVENT)
d3["VAR_NAME"] = "VAR"
d3 = d3[['VAR_NAME','MI N_VALUE',
'MAX_VALUE', 'COUNT', 'EVENT',
'EVENT_RATE', 'NONEVENT',
'NON_EVENT_RATE',
'DIST_EVENT','DIST_NON_EVENT','WOE',
'IV']]
d3 = d3.replace([np.inf, –
np.inf], 0)
d3.IV = d3.IV.sum()
d3 = d3.reset_index(drop=True)
return(d3)
def data_ vars(df1, target):
stack = traceback.extract_stack()
filename, lineno, function_name,
code = stack[ -2]
vars_name =
re.compile(r' \((.*?)\).*$').search(co
de).groups()[0]
final = (re.findall(r"[ \w']+",
vars_name))[ -1]
x = df1.dtypes.index
count = -1
for i in x:
if i.upper() not in
(final.upper()):
if np.issubdtype(df1[i],
np.number) and
len(Series.unique(df1[i])) > 2:
conv =
mono_bin(target, df1[i])
conv["VAR_NAME"] = i
count = count + 1
else:
conv =
char_bin(target, df1[i])
conv["VAR_NAME"] = i count = count + 1
if count == 0:
iv_df = conv
else:
iv_df =
iv_df.append(conv,ignore_index=True)
iv =
pd.DataFrame({'IV':iv_df.groupby('VAR
_NAME').IV.max()})
iv = iv.reset_index()
return(iv_df,iv)
final_iv, IV =
data_vars(df[df.columns.difference(['
target'])],df.target)
final_iv.to_excel(os.path.join(cd,
'{0}.xlsx'.format('final_IV')),
index=False)
print (final_iv)
#selecția variabilelor și pregătirea
datelor
IV =
IV.rename(columns={'VAR_NAME':'index'
})
IV =
IV.sort_values(['IV'],ascending=0)
IV.to_excel(os.path.join(cd,
'{0}.xlsx'.format('index_IV')),
index=False)
transform_vars_list =
df.columns.difference(['target'])
transform_prefix = 'new_'
print (transform_vars_list)
for var in transform_vars_list:
small_df =
final_iv[final_iv['VAR_NAME'] == var]
transform_dict =
dict(zip(small_df.MAX_VALUE,small_df.
WOE))
replace_cmd = ''
replace_cmd1 = ''
for i in
sorted(transform_dict.items()):
replace_cmd = replace_cmd +
str(i[1]) + str(' if x <= ') +
str(i[0]) + ' else '
replace_ cmd1 = replace_cmd1 +
str(i[1]) + str(' if x == "') +
str(i[0]) + '" else '
replace_cmd = replace_cmd + '0'
replace_cmd1 = replace_cmd1 + '0'
if replace_cmd != '0':
try:
70
df[transform_prefix +
var] = df[var].apply(lambda x:
eval(replace_cmd))
except:
df[transform_prefix +
var] = df[var].apply(lambda x:
eval(replace_cmd1))
from sklearn.ensemble import
RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(features,labels)
preds = clf.predict(features)
print (preds)
from sklearn.metrics import
accuracy_score
accuracy =
accuracy_score(preds,labels)
print(accuracy)
from pandas import DataFrame
VI =
DataFrame(clf.feature_importances_,
columns = ["RF"],
index=features.columns)
VI = VI.reset_index()
VI =
VI.sort_values(['RF'],ascending=0)
VI.to_excel(os.path.join(cd,
'{0}.xlsx'.format('index_RF')),
index=False)
from sklearn.feature_selection import
RFE
from sklearn.linear_model import
LogisticRegression
model = LogisticRegression()
rfe = RFE(model, 20)
fit = rfe.fit(features, labels)
from pandas import DataFrame
Selected = DataFrame(rfe.support_,
columns = ["RFE"],
index=features.columns)
Selected = Selected.reset_index()
Selected[Selected['RFE'] == True]
from sklearn.ensemble import
ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(features, labels)
print(model.feature_importances_)
from pandas import DataFrame
FI =
DataFrame(model.feature_importances_, columns = ["Extratrees"],
index=features.columns)
FI = FI.reset_index()
FI =
FI.sort_values(['Extratrees'],ascendi
ng=0)
FI.to_excel(os.path.join(cd,
'{0}.xlsx'.format('index_Extratress')
), index=False)
from sklearn.feature_selection import
SelectKBest
from sklearn.feature_selection import
chi2
model = Selec tKBest(score_func=chi2,
k=5)
fit = model.fit(features.abs(),
labels)
from pandas import DataFrame
pd.options.display.float_format =
'{:.2f}'.format
chi_sq = DataFrame(fit.scores_,
columns = ["Chi_Square"],
index=features.columns)
chi_sq = chi_sq.reset_inde x()
chi_sq =
chi_sq.sort_values('Chi_Square',ascen
ding=0)
chi_sq.to_excel(os.path.join(cd,
'{0}.xlsx'.format('index_Chi_Square')
), index=False)
from sklearn.svm import LinearSVC
from sklearn.feature_selection import
SelectFromModel
lsvc = LinearSVC(C=0.01,
penalty="l1",
dual=False).fit(features, labels)
model =
SelectFromModel(lsvc,prefit=True)
from pandas import DataFrame
l1 = DataFrame(model.get_support(),
columns = ["L1"],
index=features.columns)
l1 = l1.reset_index()
l1[l1['L1'] == True ]
from functools import reduce
dfs = [IV, VI, Selected, FI, chi_sq,
l1]
final_results = reduce(lambda
left,right:
pd.merge(left,right,on='index'), dfs)
final_results.to_excel(os.path.join(c
d,
'{0}.xlsx'.format('final_results')),
index=False)
#calculul sc orului variabilelor
71
columns = ['IV', 'RF', 'Extratrees',
'Chi_Square']
score_table = pd.DataFrame({},[])
score_table['index'] =
final_results['index']
for i in columns:
score_table[i] =
final_results['index'].isin(list(fina
l_results.nlargest(5,i)['in dex'])).as
type(int)
score_table['RFE'] =
final_results['RFE'].astype(int)
score_table['L1'] =
final_results['L1'].astype(int)
score_table['final_score'] =
score_table.sum(axis=1)
score_table.sort_values('final_score'
,ascending=0).to_excel(os.path.join(c
d, '{0}.xlsx'.format('final_score')),
index=False)
from
statsmodels.stats.outliers_influence
import variance_inflation_factor
def calculate_vif(features):
vif = pd.DataFrame()
vif["Features"] =
features.columns
vif["VIF"] =
[variance_inflation_factor(features.v
alues, i) for i in
range(features.shape[1])]
return(vif)
features =
features[list(score_table[score_table
['final_score'] >= 2]['index'])]
vif = calculate_vif(features)
print(vif)
while vif['VIF'][vif['VIF'] >
10].any():
remove =
vif.sort_values('VIF',ascending=0)['F
eatures'][:1]
features.drop(remove,axis=1,inplace=T
rue)
vif = calculate_vif(features)
list(vif['Features'])
final_vars = list(vif['Features']) +
['target']
df1 = df[final_vars].fillna(0)
df1.describe()
bar_color = '#f47c13'
num_color = '#ed8549'
final_iv,_ =
data_vars(df1,df1['target'])
final_iv =
final_iv[(final_iv.VAR_NAME !=
'target')]
grouped =
final_iv.groupby(['VAR_NAME'])
for key, group in grouped:
ax =
group.plot('MIN_VALUE','EVENT_RATE',k
ind='bar',color=bar_color,linewidth=1
.0,edgecolor=['black'])
ax.set_title(str(key) + " vs " +
str('target'))
ax.set_xlabel(key)
ax.set_ylabel(str('target') + "
%")
rects = ax.patches
for rect in rects:
height = rect.get_height()
ax.text(rect.get_x()+rect.get_width()
/2., 1.01*height,
str(round(height*100,1)) + '%',
ha='center',
va='bottom', color=num_color,
fontweight='bold')
# impartirea datelor in date de
invatare si date de test
from sklearn.model_selection import
train_test_split
train, test = train_test_split(df1,
test_size = 0.4)
train = train.reset_index(drop=True)
test = test.reset_index(drop=True)
features_train =
train[list(vif['Features' ])]
features_train.to_excel(os.path.join(
cd,
'{0}.xlsx'.format('features_train')),
index=False)
#print(features_train)
label_train = train['target']
#print(label_train)
features_test =
test[list(vif['Features'])]
#print(features_test)
label_test = test['ta rget']
#print(label_test)
#aplicarea algoritmului RandomForests
from sklearn.ensemble import
RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(features_train,label_train)
pred_train =
clf.predict(features_train)
72
pred_test =
clf.predict(features_test)
from sklearn.metrics import
accuracy_score
accuracy_train =
accuracy_score(pred_train,label_train
)
accuracy_test =
accuracy_score(pred_test,label_test)
from sklearn import metrics
fpr, tpr, _ =
metrics.roc_curve(np.array(label_ trai
n),
clf.predict_proba(features_train)[:,1
])
auc_train = metrics.auc(fpr,tpr)
fpr, tpr, _ =
metrics.roc_curve(np.array(label_test
),
clf.predict_proba(features_test)[:,1]
)
auc_test = metrics.auc(fpr,tpr)
print("Precizia pentru datele de
învățare: ",acc uracy_train*100, "%")
print("Precizia pentru datele de
test: ",accuracy_test*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de invatare:
",auc_train*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de test:
",auc_test*100, "%")
pd.crosstab(label_train,pd.Series(pre
d_train),rownames=['ACTUAL'],colnames
=['PRED'])
pd.crosstab(label_test,pd.Series(pred
_test),rownames=['ACTUAL'],colnames=[
'PRED'])
#aplicarea algoritmului
GradientBoosting
from sklearn.ensemble import
GradientBoostingCl assifier
clf = GradientBoostingClassifier()
clf.fit(features_train,label_train)
pred_train =
clf.predict(features_train)
pred_test =
clf.predict(features_test)
from sklearn.metrics import
accuracy_score
accuracy_train =
accuracy_score(pred_train,label_train
) accuracy_test =
accuracy_score(pred_test,label_test)
from sklearn import metrics
fpr, tpr, _ =
metrics.roc_curve(np.array(label_trai
n),
clf.predict_proba(features_train)[:,1
])
auc_train = metrics.auc(fpr,tpr)
fpr, tpr, _ =
metrics.roc_curve(np.array(label_test
),
clf.predict_proba(features_test)[:,1]
)
auc_test = metrics.auc(fpr,tpr)
print("Precizia pentru datele de
învățare: ",accuracy_train*100, "%")
print("Precizia pentru datele de
test: ",accuracy_test*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de invatare:
",auc_train*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de test:
",auc_test*100, "%")
pd.crosstab(label_train,pd.Series(pre
d_train),rownames=['ACTUAL'],colnames
=['PRED'])
pd.crosstab(label_test,pd.Series(pred
_test),rownames=['ACTUAL'],colnames=[
'PRED'])
#aplicarea algoritmului
LogisticRegression
from sklearn.linear_model import
LogisticRegression
clf = LogisticRegression()
clf.fit(features_train,label_train)
pred_train =
clf.predict(features_train)
pred_test =
clf.predict(features_test)
from sklearn.metrics import
accuracy_score
accuracy_train =
accuracy_score(pred_train,label_train
)
accuracy_test =
accuracy_score(pred_test,label_test)
from sklearn import metrics
fpr, tpr, _ =
metrics.roc_curve(np.array(label_trai
n),
clf.predict_proba(features_train)[:,1
])
73
auc_train = metrics.auc(fpr,tpr)
fpr, tpr, _ =
metrics.roc_curve(np.array(label_test
),
clf.predict_proba(features_test)[:,1]
)
auc_test = metrics.auc(fpr,tpr)
print("P recizia pentru datele de
învățare: ",accuracy_train*100, "%")
print("Precizia pentru datele de
test: ",accuracy_test*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de invatare:
",auc_train*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de test:
",auc_test*100, "%")
pd.crosstab(label_train,pd.Series(pre
d_train),rownames=['ACTUAL'],colnames
=['PRED'])
pd.crosstab(label_test,pd.Series(pred
_test),rownames=['ACTUAL'],colnames=[
'PRED'])
# Performance Tunning
from sklearn.model_selecti on import
RandomizedSearchCV
from sklearn.ensemble import
RandomForestClassifier
n_estimators = [int(x) for x in
np.linspace(start = 10, stop = 500,
num = 10)]
max_features = ['auto', 'sqrt']
max_depth = [int(x) for x in
np.linspace(3, 10, num = 1)]
max_depth.append(None)
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
bootstrap = [True, False]
random_grid = {'n_estimators':
n_estimators,
'max_features':
max_features,
'max_depth':
max_depth,
'min_samples_split':
min_samples_split,
'min_samples_leaf':
min_samples_leaf,
'bootstrap':
bootstrap}
rf = RandomForestClassifier()
rf_random =
RandomizedSearchCV(estimator = rf,
param_distributions = random_grid, n_iter = 10, cv = 2, verbose=2,
random_state=42, n_jobs = -1)
rf_random.fit(features_train,
label_train)
print("Random Forests – Hyper
parameter tuning:")
print(rf_random.best_params_)
from sklearn.ensemble import
RandomForestClassifier
clf =
RandomForestClassifier( **rf_random.be
st_params_)
clf.fit(features_train,label_train)
pred_train =
clf.predict(features_train)
pred_test =
clf.predict(features_test)
from sklearn.metrics import
accuracy_score
accuracy_train =
accuracy_score(pred_train,label_train
)
accuracy_test =
accuracy_score(pred_test,label_test)
from sklearn import metrics
fpr, tpr, _ =
metrics.roc_curve(np.array(label_trai
n),
clf.predict_proba(features_train)[:,1
])
auc_train = metrics.auc(fpr,tpr)
fpr, tpr, _ =
metrics.roc_curve(np.array(labe l_test
),
clf.predict_proba(features_test)[:,1]
)
auc_test = metrics.auc(fpr,tpr)
print("Precizia pentru datele de
învățare: ",accuracy_train*100, "%")
print("Precizia pentru datele de
test: ",accuracy_test*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de invatare:
",auc_train*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de test:
",auc_test*100, "%")
pd.crosstab(label_train,pd.Series(pre
d_train),rownames=['ACTUAL'],colnames
=['PRED'])
pd.crosstab(label_test,pd.Series(pred
_test),rownames=['ACTUAL'],colnames=[
'PRED'])
74
#from sklearn import
cross_validation, metrics
from sklearn import metrics
#from sklearn.grid_search import
GridSearchCV
from sklearn.model_selection import
GridSearchCV
from sklearn.ensemble import
GradientBoosting Classifier
n_estimators = [int(x) for x in
np.linspace(start = 10, stop = 500,
num = 10)]
max_features = ['auto', 'sqrt']
max_depth = [int(x) for x in
np.linspace(3, 10, num = 1)]
max_depth.append(None)
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
grid = {'n_estimators': n_estimators,
'max_features':
max_features,
'max_depth':
max_depth,
'min_samples_split':
min_samples_split,
'min_samples_leaf':
min_samples_leaf}
gb = GradientBo ostingClassifier()
gf_tune = GridSearchCV(estimator =
gb, param_grid = grid, cv = 2,
verbose=2, n_jobs = -1)
gf_tune.fit(features_train,
label_train)
print("Gradient Boosting – Hyper
parameter tuning:")
print(gf_tune.best_params_)
from sklearn.ensemble i mport
GradientBoostingClassifier
clf =
GradientBoostingClassifier(**gf_tune.
best_params_)
clf.fit(features_train,label_train)
pred_train =
clf.predict(features_train)
pred_test =
clf.predict(features_test)
from sklearn.metrics import
accuracy_score
accuracy_train =
accuracy_score(pred_train,label_train
)
accuracy_test =
accuracy_score(pred_test,label_test)
from sklearn import metrics fpr, tpr, _ =
metrics.roc_curve(np.array(label_trai
n),
clf.predict_proba(features_train)[:,1
])
auc_train = metrics.auc(fpr,tpr)
fpr, tpr, _ =
metrics.roc_curve(np.array(label_test
),
clf.predict_proba(features_test)[:,1]
)
auc_test = metrics.auc(fpr,tpr)
print("Precizia pentru datele de
învățare: ",accuracy_train*100, "%")
print("Precizia pentru datele de
test: ",accuracy_test*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de invatare:
",auc_train*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de test:
",auc_test*100, "%")
pd.crosstab(label_train,pd.Series(pre
d_train),rownames=['ACTUA L'],colnames
=['PRED'])
pd.crosstab(label_test,pd.Series(pred
_test),rownames=['ACTUAL'],colnames=[
'PRED'])
import matplotlib.pyplot as plt
preds =
clf.predict_proba(features_train)[:,1
]
fpr, tpr, _ =
metrics.roc_curve(np.array(label_trai
n), preds)
auc = metrics.auc(fpr,tpr)
plt.figure()
plt.title("Curba ROC pentru datele de
învățare")
plt.plot(fpr,tpr,color='#0077bc',labe
l = 'AUC = '+ str(round(auc,3)))
plt.plot([0, 1], [0, 1],
color='navy', linestyle=' –')
plt.show()
# Final model and Model Performance
from sklearn.ensemble import
GradientBoostingClassifier
clf =
GradientBoostingClassifier(**gf_tune.
best_params_)
clf.fit(features_train,label_train)
pred_train =
clf.predict(features_train)
pred_test =
clf.predict(features_test)
75
from sklearn.metrics import
accuracy_score
accuracy_train =
accuracy_score(pred_train,label_train
)
accuracy_test =
accuracy_score(pred_test,label_test)
from sklearn import metrics
fpr, tpr, _ =
metrics.roc_curve(np.array(label_trai
n),
clf.predict_proba(features_train)[:,1
])
auc_train = metrics.auc(fpr,tpr)
fpr, tpr, _ =
metrics.roc_curve(np.array(label_test
),
clf.predict_proba(features_test)[:,1]
)
auc_test = metrics.auc(fpr,tpr)
print("Precizia pentru datele de
învățare: ",accuracy_train*100, "%")
print("Precizia pentru date le de
test: ",accuracy_test*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de invatare:
",auc_train*100, "%")
print("Acoperirea zonei de sub curba
pentru datele de test:
",auc_test*100, "%")
pd.crosstab(label_train,pd.Series(pre
d_train),rowna mes=['ACTUAL'],colnames
=['PRED'])
pd.crosstab(label_test,pd.Series(pred
_test),rownames=['ACTUAL'],colnames=[
'PRED'])
import pandas as pd
def scoring(features,clf,target):
score =
pd.DataFrame(clf.predict_proba(featur
es)[:,1], columns = ['SCORE'])
score['DECILE'] =
pd.qcut(score['SCORE'].rank(method =
'first'),10,labels=range(10,0, -1))
score['DECILE'] =
score['DECILE'].astype(float)
score['TARGET'] = target
score['NONTARGET'] = 1 – target
return(score)
scores_train =
scoring(features_train,clf,label_trai
n)
print(scores_train) print(clf.predict_proba(features_trai
n))
scores_test =
scoring(features_test,clf,label_test)
import pandas as pd
import matplotlib.pyplot as plt
def plots(agg1,target,type):
plt.figure(1,f igsize=(20, 12))
plt.subplot(211)
plt.plot(agg1['DECILE'],agg1['ACTUAL'
],label='Actual')
plt.plot(agg1['DECILE'],agg1['PRED'],
label='Pred')
plt.xticks(range(10,110,10))
plt.legend(fontsize=15)
plt.grid(True)
plt.title('Actual v s Predicție',
fontsize=20)
plt.xlabel("Populare
%",fontsize=15)
plt.ylabel(str(type) + " " +
str(target) + " %",fontsize=15)
plt.subplot(223)
X = agg1['DECILE'].tolist()
X.append(0)
Y = agg1['DIST_TAR'].tolist()
Y.append(0)
plt.plot(sorted(X),sorted(Y))
plt.plot([0, 100], [0, 100],'r –
')
plt.xticks(range(0,110,10))
plt.yticks(range(0,110,10))
plt.grid(True)
plt.title('Câștig', fontsize=20)
plt.xlabel("Populare
%",fontsize=15)
plt.ylabel(str(" D istribuție") +
str(target) + " %",fontsize=15)
plt.annotate(round(agg1[agg1['DECILE'
] ==
30].DIST_TAR.item(),2),xy=[30,30],
xytext=(25,
agg1[agg1['DECILE'] ==
30].DIST_TAR.item() + 5),fontsize =
13)
plt.annotate(round(agg1[agg1['DECILE '
] ==
50].DIST_TAR.item(),2),xy=[50,50],
xytext=(45,
agg1[agg1['DECILE'] ==
50].DIST_TAR.item() + 5),fontsize =
13)
76
plt.subplot(224)
plt.plot(agg1['DECILE'],agg1['LIFT'])
plt.xticks(range(10,110,10))
plt.grid(True)
plt.title('Eficiență',
fontsize=20)
plt.xlabel("Populare
%",fontsize=15)
plt.ylabel("Eficiența",fontsize=15)
plt.tight_layout()
def
gains(data,decile_by,target,score):
inputs = list(decile_by)
inputs.extend((target,score))
decile = data[inputs]
grouped =
decile.groupby(decile_by)
agg1 = pd.DataFrame({},index=[])
agg1['ACTUAL'] =
grouped.mean()[target]*100
agg1['PRED'] =
grouped.mean()[score]*100
agg1['DIST_TAR'] =
grouped.sum()[target].cumsum()/groupe
d.sum()[target].sum()*100
agg1.index.name = 'DECILE'
agg1 = agg1.reset_index()
agg1['DECILE'] =
agg1['DECILE']*10
agg1['LIFT'] =
agg1['DIST_TAR']/agg1['DECILE']
plots(agg1,targ et,'Distribuție')
lift_train =
pd.concat([features_train,scores_trai
n],axis=1)
lift_train.to_excel(os.path.join(cd,
'{0}.xlsx'.format('lift_train')),
index=False)
lift_test =
pd.concat([features_test,scores_test]
,axis=1)
gains(lift_train,['DECILE'],'TARGE T',
'SCORE')
plt.show()
gains(lift_test,['DECILE'],'TARGET','
SCORE')
plt.show()
import pandas
from sklearn.externals import joblib
filename = 'final_model.model'
i = [d,clf]
joblib.dump(i,filename)
77
ANEXA 4
Scriptul Qlik Sense Desktop :
//Voturi
LOAD
"index",
IV
FROM [lib://src/index_IV.xlsx]
(ooxml, embedded labels, table is
Sheet1);
LOAD
"index",
RF
FROM [lib://src/index_RF.xlsx]
(ooxml, embedded labels, table is
Sheet1);
LOAD
"index",
Extratrees
FROM
[lib://src/index_E xtratress.xlsx]
(ooxml, embedded labels, table is
Sheet1);
LOAD
"index",
Chi_Square
FROM
[lib://src/index_Chi_Square.xlsx]
(ooxml, embedded labels, table is
Sheet1);
LOAD
"index",
IV as "IV_Final",
RF as "RF_Final",
Extratrees as "ExtraTrees_final",
Chi_Square as "Chi_Square_final",
RFE,
L1,
final_score
FROM [lib://src/final_score.xlsx]
(ooxml, embedded labels, table is
Sheet1);
load * inline [
Voting_Algorithms,
"Information Value",
"Random Forests",
"Extra Trees",
"Chi Square"
];
//Predicție
LOAD
eNBcellConfig0dlBandwidth,
total_bytes_sdus_ul,
total_bytes_sdus_dl,
eNBcellConfig0siConfigsfn,
eNBcellConfig0ulPuschPower,
LClcUeConfig0rnti,
eNBcellConfig0dlFreq,
UEueConfig0rnti,
SCORE,
DECILE,
"DECILE*10",
TARGET,
NONTARGET,
"TOTAL",
ACTUAL,
PRED,
DIST_TAR,
LIFT
FROM [lib://src/final -qlik.xlsx]
(ooxml, embedded labels, table is
Sheet1);
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Prelucrarea și analiza datelor de pe interfețele de acces ale unei rețele de [630110] (ID: 630110)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
