# Projekt z IUM - dokumentacja projektu
Pierwsze linki dotyczące tego zagadnienia
* https://dl.acm.org/doi/abs/10.1145/2647868.2654940
* https://proceedings.neurips.cc/paper/2013/hash/b3ba8f1bee1238a2f37603d90b58898d-Abstract.html
* https://ieeexplore.ieee.org/abstract/document/4457263
* https://link.springer.com/chapter/10.1007/978-3-642-13287-2_3
Jakbyś trafił na jakieś płatne artykuły(aka za paywallem) -> to skorzystaj z tego https://12ft.io/
Dane z tablic / list
* https://www.tecton.ai/blog/introducing-array-type-features/
* https://stackoverflow.com/questions/62409290/how-to-deal-with-array-of-string-features-in-traditional-machine-learning
Cała ksiązka o rozwiązaniu naszego zadania:
https://link.springer.com/content/pdf/10.1007/978-3-642-13287-2.pdf?pdf=button%20sticky
Link prywatny
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/e7d2054f-86bf-4bf8-8ffd-3ce326056b35/978-3-642-13287-2.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221203%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221203T164704Z&X-Amz-Expires=86400&X-Amz-Signature=50f70ebebc89bac42c9699d71bfc56cac407ff13c6011f6491e0232348059ac9&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22978-3-642-13287-2.pdf%22&x-id=GetObject
## Definicja zadania
### Kontekst
Polecanie muzyki przez portal "Pozytywka".
Należy sprecyzować:
- W jaki sposób polecamy muzykę? (Lista utworów do wyboru do słychania lub lista utworów do automatycznego otwarzania zakończeniu obecnie otworzanego utwory, czy coś innego?)
- Jak ta fukcjonalność wygląda obecnie? (Czy rozwiązanie istnieje, jeśli tak to jak dobrze działa? Czy staramy się przewyższyć konkurencję?)
- Pożądanie właściowści rozwiązania? (Liczba utworów do polecenia. Maksymalny procent ominętych przez użytkownika polecanych utworów. Czy mogą być polecane utwory kiedyś przesłuchane przez użytkownika, jeśli tak, to jak krótki czas powinien przejść.)
### Zadabnie biznesowe
[Sprecyzować po otrzymaniu kontekstu]
### Zadanie modelowania
System generowania rekomendacji.
## Analiza danych
Plik tracks.jsonl
- Niektóre utwory nie posiadają swojego id? Czy dane napewno prawodłowo został przygotowane?
- Niektore utowry nie mają nazwy? Czy taki utwór może występować?
- Jak obliczany jest na stronie popularity, jakie wartości są dopuszczalne?
- Niektóre utwory nie posiadają atrybutu popularity.
- Niektóre utwory nie posiadają atrybutu id_artist.
- Dlaczego niektóre utwory nie mają id? → to poważny błąd w bazie utworów
- Dlaczego niektóre utwory nie mają nazwy?
- Jakie są dopuszczalne wartości atrybutu pupularity?
- Jakie znaczenie ma atrybut explicit?
Plik artists.jsonl
- Brakujące wartości id artystów. → wartości -1
Plik sessions.jsonl
Plik users.jsonl
- Czy dane użytkowników są napewno kompletne, ponieważ w pliku sessions.jsonl występują rekordy użytkowników o id wychodzący poza aktualny zakre
- Niektóre sesje nie posiadają user_id. -> możliwe jest uzyskanie user_id z innego wpisu z dla danej sesji.s- Występują wpisy w sesji gdzie track_id jest null-em, nawet w przypadku gdy event_type jest równe play/like.
- .
# Sugerowane pytania w mail-ach
## Mail o doprecyzowanie
Poniżej znajduje się lista zagadnień do rozwiania:
- W jaki sposób powinien przebiegać proces polecania użytkownikowi utworów muzycznych?
- Czy użytkownikowi wyświetlamy listę proponowanych utworów do odtworzenia, wygenerowanych z użyciem naszego modelu?
- Czy utwór proponowany powinien zostać odtworzony automatycznie zaraz po zakończeniu odtwarzania innego utworu?
- Czy aktualnie na portalu “Pozytywka” działa funkcjonalność polecania utworu użytkownikowi? Jeżeli tak to na jakiej zasadzie działa i jak dobrze?
- Jakie są pożądane parametry systemu polecającego?
- Liczba polecanych utworów?
- Maksymalna liczba pomijanych utworów polecanych użytkownikowi? W tak jak jest to na innych serwisach muzycznych, dla użytkowników nie premium?
- Czy mogą być polecane utwory już kiedyś przesłuchane przez użytkownika? Jeżeli tak, jak długi interwał powinien być pomiędzy poszczególnymi przesłuchaniami?
## Mail o brakujące dane/informacje zwiazane z danymi
W trakcie analizy danych dostarczonych do zadania 01_02, natkneliśmy się na pewne braki i niepoprawne wartości w poszczególnych plikach.
Plik users.jsonl
1. Użytkownik o (user_id = 122) posiada, dodatkowy atrybut “id”, jakie jest jego znaczenie? Czy nie jest to błąd podczas pozyskiwania danych?
2. W przypadku atrybutu “premium_user”, dla użytkowników o “user_id” 101 oraz 127 występują braki w postaci wartości null. Rozumiem, że użytkownik ma albo nie ma premium dlatego wydaje się, że jest to błędna wartość.
3. Użytkownik o id 140 nie ma wartości atrybutu *favourite_genres*, czy to oznacza, że nie wprowadził zainteresowań, czy błąd systemy?
Plik tracks.jsonl
1. Jak obliczany jest na stronie atrybut popularity, jakie wartości są dopuszczalne? Jakie ma znaczenie? Czy utwór może go nieposiadać?
2. Niektóre utwory nie posiadają swojego atrybutu “id”? Czy dane napewno został prawodłowo przygotowane?
Lista brakujących w pliku:
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/c8ee0acd-8bf1-4b3f-af63-fc1f365b41d2/missing_tracks_id.jsonl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221130%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221130T083457Z&X-Amz-Expires=86400&X-Amz-Signature=1f49060791890e594670cfa307a937429b1904f7c8d85542e39f3de808d20b09&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22missing_tracks_id.jsonl%22&x-id=GetObject
3. Niektóre utwory nie posiadają swojego atrybutu “id_artist”? Raczej nieprawdopodobne by utwór nie miał swojego artysty?
Lista brakujących w pliku:
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/28b5d64b-4824-42e0-b472-4a2a783dbadf/missing_artists_for_track.jsonl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221130%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221130T121438Z&X-Amz-Expires=86400&X-Amz-Signature=e38cd1dc12f06023fd630eef92893b35c4d0ffa106fee9d4c127d05821ff875a&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22missing_artists_for_track.jsonl%22&x-id=GetObject
4. Jakie jest znaczenie atrybutu “explicit”?
6. Niektóre utwory nie posiadają nazwy? Czy nie jest to błąd?
Lista utworów bez nazwy:
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/851c5c3f-79ad-48d9-bf64-23eaaa5d9fd0/missing_title_for_track.jsonl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221130%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221130T121413Z&X-Amz-Expires=86400&X-Amz-Signature=d4c2d798ab14431f6ce444fff31d16a8f0b386969021908a8852567a74c21a2f&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22missing_title_for_track.jsonl%22&x-id=GetObject
Plik artists.jsonl
1. Niektórzy artyści jako wartość atrybutu “id” mają przypisaną wartość -1. Wydaje się to być błędem.
Lista artystów z błednym id:
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/0afa14a5-c224-4cc4-a7c0-bf64f551df35/missing_artists_id.jsonl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221130%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221130T083407Z&X-Amz-Expires=86400&X-Amz-Signature=d47956f14599daefbe7c2da4ae13de65329bf4773547b38d5d4afe6a08672504&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22missing_artists_id.jsonl%22&x-id=GetObject
2. Niektórzy artyści nie należą do żadnego gatunku muzycznego, czy nie jest to błąd?
Lista artystów bez gatunku muzycznego:
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/d2ffb8b0-9bf0-4165-89c3-0c456ae7be6d/artists_without_genres.jsonl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221130%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221130T083252Z&X-Amz-Expires=86400&X-Amz-Signature=e47c466b5bc7d00ac9ffff0e29fc4aa4b1666b05a872a49816a25840d589559e&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22artists_without_genres.jsonl%22&x-id=GetObject
Plik sessions.jsonl
1. Niektóre sesje nie posiadają id użytkownika? Możliwe jest przepisanie go z innego wpisu danej sesji.
Lista sesji bez użytkownika:
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/558802b6-1b77-4117-b432-1ba9fd6e629a/sessions_without_user.jsonl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221130%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221130T083603Z&X-Amz-Expires=86400&X-Amz-Signature=270d31fb021393269d6e9cc60d3959446a8cdacfec2456ffb5b1e26f5de23050&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22sessions_without_user.jsonl%22&x-id=GetObject
2. Niektóre sesje nie będące reklamą nie posiadają id utwóru odtwarzanego, czy nie jest to błąd w pozyskiwaniu danych?
Lista sesji bez track_id:
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/d23e231f-01fa-4c4b-8994-43717d2f779f/sessions_without_track.jsonl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221130%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221130T083551Z&X-Amz-Expires=86400&X-Amz-Signature=96d06426ed2bcf2943d72671f3fb5525dd8c79cdf762fd52d8d6b096fd96bf56&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22sessions_without_track.jsonl%22&x-id=GetObject
3. Niektóre sesje nie posiadają typu akcji “event_type”, czy takie wpisy nie są błędne?
Lusta sesji bez event_type:
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/5ee00a71-e43a-47bf-9994-612468ed28a1/sessions_without_event_type.jsonl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20221130%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20221130T083525Z&X-Amz-Expires=86400&X-Amz-Signature=5d74ca89d6efe54bebd33f12cfded8146f8f5b89a52aee86f99768e68da37e41&X-Amz-SignedHeaders=host&response-content-disposition=filename%3D%22sessions_without_event_type.jsonl%22&x-id=GetObject
## Analiza danych
### Sesje - plik: sessions.jsonl
#### Znaczenie atrybutów
- session_id - identyfikator danej sesji użytkownika
- timestamp - znacznik czasowy
- user_id - identyfikator użytkownika
- track_id identyfikator utworu
- event_type - typ akcji wykonanej
#### Analiza wartości
| | Typ atrybutu | Rodzaj atrybutu | Brak danych | Rozkład/Zbalansowanie |
| ---------- | ------------ | ------------------- | ----------- | ------------------------------- |
| session_id | Integer | Dyskretna nominalna | 0 | - |
| timestamp | DataTime | Znacznik czasowy | 0 | Jednostajny |
| user_id | Integer | Dyskretna nominalna | 1432 | - |
| track_id | String | Dyskretna nominalna | 5369 | - |
| event_type | String | Dyskretna nominalna | 1439 | like:play:skip $\approx$ 3:13:4 |

| | timestamp | event_type |
| ---------------------- | ---------------- | ------------------------------- |
| Typ zmiennej | Znacznik czasowy | Dyskretna nominalna |
| Braki danych | 0 | 1439 |
| Rodzaj braków | - | ? |
| Rozkład/Zbalansowannie | Jednostajny | like:play:skip $\approx$ 3:13:4 |
### Ścieżki - plik: tracks.jsonl
#### Znaczenie atrybutów
- id - identyfikator utworu
- name - nazwa utworu
- popularity - wskaźnik popularności
- duration_ms - długość utworu w ms
- explicit - nieodpowiednia / seksualny kontent
- id_artist - identyfikator artysty
- release_date - data wypuszczenia
- danceability - współczynnik taneczności
- Atrybuty związane z parametrami z dziedziny muzyki
- danceability - taneczność
- energy - energia
- key - tonacja
- loudness - poziom głośności
- speechiness - wymowność
- acousticness - akustyka
- instrumentalness - instumentalność
- liveness - żywotność
- valence - pozytywność
- tempo - tempo
#### Analiza wartości
| | Typ atrybutu | Rodzaj zmiennej | Brak danych | Rozkład/Zbalansowanie |
| ---------------- | ------------ | -------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| name | String | Dyskretna nominalna | 1126 | - |
| popularity | Integer | Dyskretna porządkowa | 1114 | Częstość odwrotnie liniowo zależy od wartości |
| duration_ms | Integer | Ciągła | 0 | Rozkład "Z grubymi ogonami" (Większość ścieżek ma długość bliską 200 sekund, ale istnieją ścieżki od długości bliskiej jednej godziny.) |
| explicit | Boolean | Dyskretna nominalna | 0 | Nie:Tak $\approx 15:3$ |
| release_date | Date | Znacznik czasowy | 0 | - |
| danceability | Float | Ciągła | 0 | Normalny |
| energy | Float | Ciągła | 0 | Normalny |
| key | Integer | Dyskretna porządkowa | 0 | Pokazane na rysunku niżej |
| loudness | Float | Ciągła | 0 | Normalny |
| speechiness | Float | Ciągła | 0 | Normalny (Dominują wartości z przedziału od 0.02 do 0.04) |
| acousticness | Float | Ciągła | 0 | Normalny |
| instrumentalness | Float | Ciągła | 0 | Bardzo mocno dominuje wartość 0, reszta jednostajnie |
| liveness | Float | Ciągła | 0 | Normalny |
| valence | Float | Ciągła | 0 | Normalny |
| tempo | Float | Ciągła | 0 | Normalny |


### Artyści - plik: artists.jsonl
#### Znaczenie atrybutów
- id - identyfikator artysty
- name - nazwa artysty
- genres - nazwy gatunków jakie nagrywa dany artysta
#### Analiza wartości
| Nazwa atrybutu | Typ atrybutu | Rodzaj zmiennej | Brak danych | Wartości niepoprawne | Rozkład/Zbalansowanie |
| -------------- | --------------- | ----------------------------- | ----------- | -------------------- | --------------------- |
| id | String | Dyskretna nominalna | 0 | 83 | - |
| name | String | Dyskretna nominalna | 0 | 0 | - |
| genres | Array of String | Lista dyskretnych nominalnych | 78 | 0 | - |

Nie ma większego sensu sprwdzać rozkładu wartości atrybutów "id" oraz "name".
W przypadku atrybutu "genres" sprawdziliśmy ile jest różnych gatunków oraz jak czesto występują.
Liczba wszystkich gatunków w pliku: 836
Z czego najpopularniejsze z nich to: pop, dance pop, pop rap, post-teen pop, rap, rock, latin, hip hop.


### Użytkownicy - plik: users.jsonl
#### Znaczenie atrybutów
- user_id - unikalne id użytkownika
- name - imię i nazwisko użytkowniaka
- city - miasto
- street - ulica
- favourite_genres - lista ulubionych gatunków
- premium_user - czy użytkownik premium
- id - atrybut posiadany przez jednego użytkownika
#### Analiza wartości
| Nazwa atrybutu | Typ atrybutu | Rodzaj zmiennej | Brak danych | Wartości niepoprawne | Rozkład/Zbalansowanie |
| ---------------- | --------------- | ----------------------------- | ----------- | -------------------- | --------------------- |
| user_id | Integer | Dyskretna nominalna | 0 | 0 | Jednostajny |
| name | String | Dyskretna nominalna | 0 | 0 | - |
| city | String | Dyskretna nominalna | 0 | 0 | - |
| street | String | Dyskretna nominalna | 0 | 0 | - |
| favourite_genres | Array of String | Lista dyskretnych nominalnych | 1 | 0 | - |
| premium_user | Boolean | Dyskretna nominalna | 2 | 0 | zero-jedynkowy / 39/9 |
| id | Integer | Dyskretna nominalna | 49 | 1 | - |

Polubione gatunki przez użytkowników:


{"metaMigratedAt":"2023-06-17T15:17:48.073Z","metaMigratedFrom":"Content","title":"Projekt z IUM - dokumentacja projektu","breaks":true,"contributors":"[{\"id\":\"8bcbd352-f75d-4b89-bb59-9b419d018142\",\"add\":18400,\"del\":4431},{\"id\":\"ba5222d4-fe50-4819-89d4-ab02b59540dc\",\"add\":6381,\"del\":1191},{\"id\":null,\"add\":2,\"del\":0}]"}