reennv commited on
Commit
187655e
·
verified ·
1 Parent(s): 15ea36e

Upload 26 files

Browse files
Files changed (26) hide show
  1. Rekomendasi Materi Belajar/edtech/backend/data/processed/cleaned_education_data.csv +0 -0
  2. Rekomendasi Materi Belajar/edtech/backend/data/raw/personalized_education_data.csv +0 -0
  3. Rekomendasi Materi Belajar/edtech/backend/data/recommendations/evaluations/collaborative_evaluation.csv +2 -0
  4. Rekomendasi Materi Belajar/edtech/backend/data/recommendations/evaluations/content_based_evaluation.csv +2 -0
  5. Rekomendasi Materi Belajar/edtech/backend/data/recommendations/evaluations/hybrid_evaluation.csv +2 -0
  6. Rekomendasi Materi Belajar/edtech/backend/data/recommendations/test_data.csv +201 -0
  7. Rekomendasi Materi Belajar/edtech/backend/data/recommendations/train_data.csv +0 -0
  8. Rekomendasi Materi Belajar/edtech/backend/models/recommenders/collaborative/collab_model.joblib +3 -0
  9. Rekomendasi Materi Belajar/edtech/backend/models/recommenders/content_based/content_model.joblib +3 -0
  10. Rekomendasi Materi Belajar/edtech/backend/models/recommenders/hybrid/hybrid_model.joblib +3 -0
  11. Rekomendasi Materi Belajar/edtech/backend/src/app.py +193 -0
  12. Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/evaluations/collaborative_evaluation.csv +2 -0
  13. Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/evaluations/content_based_evaluation.csv +2 -0
  14. Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/evaluations/hybrid_evaluation.csv +2 -0
  15. Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/test_data.csv +201 -0
  16. Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/train_data.csv +0 -0
  17. Rekomendasi Materi Belajar/edtech/backend/src/models/recommenders/collaborative/collab_model.joblib +3 -0
  18. Rekomendasi Materi Belajar/edtech/backend/src/models/recommenders/content_based/content_model.joblib +3 -0
  19. Rekomendasi Materi Belajar/edtech/backend/src/models/recommenders/hybrid/hybrid_model.joblib +3 -0
  20. Rekomendasi Materi Belajar/edtech/backend/src/recommendation/collaborative.py +144 -0
  21. Rekomendasi Materi Belajar/edtech/backend/src/recommendation/content_based.py +198 -0
  22. Rekomendasi Materi Belajar/edtech/backend/src/recommendation/data_splitter.py +117 -0
  23. Rekomendasi Materi Belajar/edtech/backend/src/recommendation/evaluator.py +356 -0
  24. Rekomendasi Materi Belajar/edtech/backend/src/recommendation/hybrid.py +127 -0
  25. Rekomendasi Materi Belajar/edtech/backend/src/recommendation/utils.py +61 -0
  26. Rekomendasi Materi Belajar/edtech/backend/src/train_recommender.py +220 -0
Rekomendasi Materi Belajar/edtech/backend/data/processed/cleaned_education_data.csv ADDED
The diff for this file is too large to render. See raw diff
 
Rekomendasi Materi Belajar/edtech/backend/data/raw/personalized_education_data.csv ADDED
The diff for this file is too large to render. See raw diff
 
Rekomendasi Materi Belajar/edtech/backend/data/recommendations/evaluations/collaborative_evaluation.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ RMSE,MAE,Precision@K,Recall@K,NDCG@K,model
2
+ 0.5873683620699068,0.5249163001110007,0.19658119658119655,0.47692307692307695,0.3365554336734982,collaborative
Rekomendasi Materi Belajar/edtech/backend/data/recommendations/evaluations/content_based_evaluation.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ RMSE,MAE,Precision@K,Recall@K,NDCG@K,model
2
+ 0.279107926379566,0.24733157275956955,0.3350427350427351,1.0,0.6786757984354084,content_based
Rekomendasi Materi Belajar/edtech/backend/data/recommendations/evaluations/hybrid_evaluation.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ RMSE,MAE,Precision@K,Recall@K,NDCG@K,model
2
+ 0.279107926379566,0.24733157275956955,0.19658119658119655,0.47692307692307695,0.3365554336734982,hybrid
Rekomendasi Materi Belajar/edtech/backend/data/recommendations/test_data.csv ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ student_id,grade,tech_savvy,timestamp,duration_minutes,engagement_score,completion_rate,quiz_score,material_rating,interaction_duration,related_materials,material_engagement_score,feature_engagement,jam_belajar,hari_dalam_minggu,akhir_pekan,efisiensi_belajar,rasio_penyelesaian,interaksi_total,material_type_encoded,preferensi_materi,jumlah_pengakses,engagement_rata2,gender_Male,learning_style_Kinesthetic,learning_style_Visual,subject_English,subject_History,subject_Mathematics,subject_Science,click_page_English,click_page_History,click_page_Home,click_page_Math,click_page_Science,performance_label_encoded,learning_speed_encoded,student_feedback_encoded,achievement_status_encoded,is_assessment_encoded
2
+ STU1120,0.8,1,2025-03-26 21:15:00,0.409090909090909,0.7777777777777777,0.977777777777778,0.5847013960703209,0.75,0.3333333333333333,Video Lesson Programming,0.960166939416453,0.2525997824597098,0.8571428571428572,2,0,0.1513564189009025,0.977777777777778,0.3581081081081081,0,0.2745098039215686,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
3
+ STU1017,0.3999999999999999,0,2024-12-12 17:45:00,0.6454545454545454,0.8888888888888888,1.0,0.5681836543433301,0.25,0.8,Video Lesson Physics,0.2530215271532433,0.3298774180153486,0.2857142857142856,3,0,0.1131899060560181,1.0,0.602195945945946,0,0.1853496115427302,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
4
+ STU1002,0.0,1,2025-05-18 20:00:00,0.009090909090909,0.6666666666666665,0.8555555555555555,0.3878942605997935,0.5,0.8,Audio Lecture Modern History,0.942258990119304,0.1077354379822434,0.714285714285714,6,1,0.6969130025517146,0.8555555555555555,0.0515202702702702,1,0.5952645209027007,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,2.0,2.0,1,1
5
+ STU1144,0.8,1,2025-02-01 15:15:00,0.8363636363636363,0.3333333333333333,0.9555555555555556,0.625,0.25,0.5333333333333334,Interactive Exercise Ancient Civilizations,0.6156811232934086,0.5389839325506166,0.0,5,1,0.0332911489283597,0.9555555555555556,0.3310810810810811,0,0.2042175360710322,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,2.0,2.0,1,0
6
+ STU1187,0.0,1,2024-10-23 16:45:00,0.5454545454545454,0.7777777777777777,0.7999999999999999,0.5847013960703209,0.25,0.4666666666666667,Video Lesson Programming,0.3325434368052288,0.1845964240344895,0.1428571428571428,2,0,0.1167179028824841,0.7999999999999999,0.4594594594594595,2,0.1553829078801332,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,0.0,1,0
7
+ STU1043,0.5999999999999999,1,2025-06-25 15:15:00,0.5636363636363636,0.5555555555555556,0.6888888888888889,0.0,0.25,0.7333333333333334,Interactive Exercise Ancient Civilizations,0.4689347515494337,0.4543840323329537,0.0,2,0,0.0823199315255259,0.6888888888888889,0.3513513513513514,0,0.169811320754717,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
8
+ STU1183,0.8,1,2025-02-16 19:15:00,0.8999999999999999,0.3333333333333333,0.8333333333333334,0.375,0.5,0.0666666666666667,Interactive Exercise Algebra,0.853616654280294,0.6649625302161895,0.5714285714285712,6,1,0.0304923601195549,0.8333333333333333,0.3547297297297297,0,0.3978912319644839,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1,1.0,0.0,1,0
9
+ STU1141,0.8,0,2024-12-08 19:15:00,0.2999999999999999,0.2222222222222222,0.9888888888888888,1.0,0.25,1.0,Video Lesson Programming,0.4664934346214637,0.3225980051157171,0.5714285714285712,6,1,0.0672438968193026,0.9888888888888888,0.0954391891891892,2,0.45338512763596,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,1
10
+ STU1124,0.5999999999999999,0,2025-05-13 22:15:00,0.7818181818181817,0.7777777777777777,0.977777777777778,0.5912314024085137,0.75,0.5333333333333334,Interactive Exercise Vocabulary,0.1882280420886091,0.5793840725909646,1.0,1,0,0.0823199318470881,0.977777777777778,0.6351351351351352,1,0.3740288568257491,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,0.0,1,0
11
+ STU1193,0.5999999999999999,0,2025-03-29 18:45:00,0.9909090909090909,1.0,0.8777777777777778,0.625,1.0,0.3333333333333333,Video Lesson World War,0.0614449211153287,0.2673617654399955,0.4285714285714284,5,1,0.0830981666850345,0.8777777777777778,0.991554054054054,2,0.2852386237513873,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,2.0,1,0
12
+ STU1057,0.5999999999999999,1,2024-12-02 16:45:00,0.0909090909090909,0.8888888888888888,0.9222222222222224,0.375,1.0,0.3333333333333333,Interactive Exercise Algebra,0.5500703600371556,0.0432300582306915,0.1428571428571428,0,0,0.4898035747537576,0.9222222222222224,0.1385135135135135,2,0.1908990011098779,1.0,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,2.0,1,0
13
+ STU1118,0.5999999999999999,0,2024-09-04 21:00:00,0.9090909090909092,0.5555555555555556,0.8444444444444444,1.0,0.5,0.8666666666666667,Audio Lecture Modern History,0.2395030187344075,0.9003797474898564,0.8571428571428572,2,0,0.0503274129549779,0.8444444444444444,0.543918918918919,0,0.2364039955604883,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,1
14
+ STU1080,0.5999999999999999,0,2025-03-20 20:15:00,0.4363636363636363,0.5555555555555556,0.6666666666666666,0.375,1.0,0.4666666666666667,Video Lesson Algebra,0.9762892629403518,0.1977467437259178,0.714285714285714,3,0,0.1046740504897195,0.6666666666666666,0.2804054054054054,0,0.3351831298557158,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0,2.0,0.0,0,0
15
+ STU1025,1.0000000000000002,0,2025-04-29 17:00:00,0.7272727272727272,0.6666666666666665,0.9222222222222224,0.5912314024085137,0.75,0.1333333333333333,Audio Lecture Literature,0.0922904626904395,0.2129170895751014,0.2857142857142856,1,0,0.0761459368976383,0.9222222222222224,0.5185810810810811,1,0.4200887902330743,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
16
+ STU1050,0.5999999999999999,0,2025-03-28 18:30:00,0.7545454545454545,0.6666666666666665,0.8111111111111111,0.0,0.25,0.6000000000000001,Video Lesson Algebra,0.6371149246219355,0.6176354132885155,0.4285714285714284,4,0,0.0733576811730414,0.811111111111111,0.5363175675675677,0,0.2008879023307436,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0,0.0,1.0,0,1
17
+ STU1119,0.5999999999999999,1,2024-08-03 18:15:00,0.2181818181818181,0.5555555555555556,0.9222222222222224,0.5912314024085137,0.5,0.0666666666666667,Interactive Exercise Vocabulary,0.0799998736256766,0.1431947951612596,0.4285714285714284,5,1,0.1858251365622197,0.9222222222222224,0.1587837837837838,2,0.2613762486126526,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
18
+ STU1048,1.0000000000000002,1,2025-06-20 17:45:00,0.109090909090909,0.3333333333333333,0.9888888888888888,0.375,0.0,0.0,Interactive Exercise Algebra,0.5235556486108981,0.9963034216649884,0.2857142857142856,4,0,0.1917680159890264,0.9888888888888888,0.0608108108108108,2,0.3063263041065482,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,2.0,1,0
19
+ STU1143,0.1999999999999999,0,2025-06-25 16:45:00,0.4272727272727272,1.0,0.9111111111111112,0.625,0.5,0.2,Video Lesson World War,0.9829341963520212,0.5315303809355705,0.1428571428571428,2,0,0.1846782667821868,0.9111111111111112,0.4679054054054055,0,0.3310210876803552,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
20
+ STU1046,0.5999999999999999,0,2025-03-14 16:45:00,0.0818181818181818,0.4444444444444445,0.8333333333333334,0.5681836543433301,1.0,0.5333333333333334,Video Lesson Physics,0.9491244657566036,0.6830796202090033,0.1428571428571428,4,0,0.2821623856589356,0.8333333333333333,0.0667229729729729,0,0.1305956344802071,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
21
+ STU1164,0.8,1,2025-05-13 20:00:00,0.1545454545454545,0.6666666666666665,0.8999999999999999,0.5912314024085137,0.0,0.3999999999999999,Audio Lecture Literature,0.3191023304436176,0.711409198479234,0.714285714285714,1,0,0.2778297623423536,0.9000000000000001,0.1461148648648648,2,0.3129855715871253,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
22
+ STU1126,1.0000000000000002,1,2024-02-07 16:00:00,0.7,0.3333333333333333,0.8444444444444444,0.1207988624612208,0.75,0.0,Audio Lecture Chemistry,0.4429276831831524,0.0549890514854965,0.1428571428571428,2,0,0.0408051385700341,0.8444444444444444,0.2804054054054054,2,0.3779134295227524,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0,1.0,2.0,0,1
23
+ STU1168,0.0,0,2024-10-21 17:30:00,0.609090909090909,1.0,0.8222222222222222,0.375,0.5,0.1333333333333333,Interactive Exercise Algebra,0.3883763493819835,0.1926571057052733,0.2857142857142856,0,0,0.1340371613940268,0.8222222222222222,0.6368243243243243,0,0.3657047724750277,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
24
+ STU1158,0.5999999999999999,0,2024-07-03 21:00:00,0.0181818181818181,1.0,0.8555555555555555,0.625,0.75,0.2666666666666666,Video Lesson World War,0.6824886824968809,0.0647585482649579,0.8571428571428572,2,0,0.9158091743913784,0.8555555555555555,0.0878378378378378,1,0.5001849796522383,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,0.0,1,0
25
+ STU1091,0.3999999999999999,0,2024-09-29 22:00:00,0.7454545454545454,0.2222222222222222,0.9666666666666666,0.5847013960703209,0.75,0.5333333333333334,Video Lesson Programming,0.6806446031211876,0.4663394241295531,1.0,6,1,0.0259486741446228,0.9666666666666666,0.2195945945945946,0,0.1831298557158712,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
26
+ STU1121,1.0000000000000002,0,2025-02-18 15:30:00,0.7454545454545454,0.2222222222222222,0.9888888888888888,0.625,0.75,0.0666666666666667,Audio Lecture Modern History,0.9198735763978956,0.0384393650376045,0.0,1,0,0.0259486741446228,0.9888888888888888,0.2195945945945946,2,0.3079911209766925,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
27
+ STU1173,0.0,0,2024-12-25 18:00:00,0.9272727272727272,0.3333333333333333,0.8333333333333334,0.0,0.5,0.4666666666666667,Interactive Exercise Ancient Civilizations,0.3011587474359719,0.2087357000960709,0.4285714285714284,2,0,0.0293999757110805,0.8333333333333333,0.3648648648648649,2,0.4413614502404736,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,2.0,0.0,0,1
28
+ STU1155,0.1999999999999999,1,2025-06-29 16:30:00,0.6454545454545454,0.6666666666666665,0.7333333333333333,0.5912314024085137,1.0,0.1333333333333333,Video Lesson Grammar,0.7560720048047218,0.1397250197943573,0.1428571428571428,6,1,0.0857499288226175,0.7333333333333333,0.4653716216216216,2,0.4520902700702922,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
29
+ STU1068,1.0000000000000002,0,2025-01-03 22:45:00,0.1818181818181818,0.2222222222222222,0.6777777777777778,0.5681836543433301,0.25,0.8666666666666667,Interactive Exercise Biology,0.33277656825806,0.8052497769406544,1.0,4,0,0.1008419139685898,0.6777777777777777,0.0625,1,0.2047724750277469,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0,2.0,1.0,0,0
30
+ STU1146,1.0000000000000002,0,2024-08-07 21:00:00,0.709090909090909,0.5555555555555556,0.7222222222222222,0.5847013960703209,0.0,0.7333333333333334,Video Lesson Programming,0.7437976259548672,0.8836880616022553,0.8571428571428572,2,0,0.065481763895085,0.7222222222222222,0.4324324324324324,1,0.4334073251942286,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
31
+ STU1037,0.0,1,2024-11-19 17:45:00,0.1272727272727272,0.8888888888888888,0.8222222222222222,0.0139607032057917,0.5,0.0,Audio Lecture Calculus,0.8698855222250614,0.5246296719978385,0.2857142857142856,1,0,0.4064546505186224,0.8222222222222222,0.1689189189189189,1,0.2669256381798002,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0.0,0.0,0,1
32
+ STU1112,0.0,0,2024-11-05 19:30:00,0.1181818181818181,0.6666666666666665,0.9888888888888888,0.5681836543433301,0.5,0.1333333333333333,Video Lesson Physics,0.863229162957669,0.9783208901452084,0.5714285714285712,1,0,0.3279375434396915,0.9888888888888888,0.1224662162162162,1,0.0488346281908989,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1,1.0,0.0,1,0
33
+ STU1139,1.0000000000000002,0,2025-05-12 19:15:00,0.6454545454545454,1.0,0.8333333333333334,0.5681836543433301,0.0,0.8666666666666667,Audio Lecture Chemistry,0.3467422872761973,0.0246006528410567,0.5714285714285712,0,0,0.1269098946727184,0.8333333333333333,0.6706081081081082,2,0.2802441731409545,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1,0.0,1.0,1,0
34
+ STU1024,0.8,1,2024-05-06 18:45:00,0.3727272727272727,0.6666666666666665,0.7777777777777778,0.5681836543433301,1.0,1.0,Interactive Exercise Biology,0.8958564158902083,0.7623066120152141,0.4285714285714284,0,0,0.1422439984895389,0.7777777777777778,0.2880067567567568,0,0.1176470588235294,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
35
+ STU1190,0.8,0,2025-02-24 19:00:00,0.809090909090909,0.7777777777777777,0.9888888888888888,0.5847013960703209,1.0,0.3333333333333333,Video Lesson Programming,0.7397095740941637,0.9809790634754756,0.5714285714285712,0,0,0.0795135705620603,0.9888888888888888,0.6554054054054055,2,0.7918978912319644,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
36
+ STU1030,0.1999999999999999,1,2025-06-28 15:30:00,0.6545454545454544,0.4444444444444445,0.8666666666666667,0.5912314024085137,1.0,0.6000000000000001,Video Lesson Grammar,0.4898163483934529,0.0896283653779353,0.0,5,1,0.0574733669276692,0.8666666666666667,0.3327702702702703,1,0.3701442841287459,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,2.0,1,0
37
+ STU1129,0.5999999999999999,0,2024-11-16 21:30:00,0.1818181818181818,0.6666666666666665,0.6888888888888889,0.5912314024085137,1.0,0.6000000000000001,Interactive Exercise Vocabulary,0.618762185876628,0.5457748043851429,0.8571428571428572,5,1,0.2490177879190889,0.6888888888888889,0.1638513513513513,0,0.0904550499445061,0.0,0.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,2.0,0,0
38
+ STU1185,1.0000000000000002,0,2024-04-09 15:45:00,0.0818181818181818,0.6666666666666665,0.8555555555555555,0.5681836543433301,0.75,0.0,Audio Lecture Chemistry,0.8701004058743459,0.7327727578802335,0.0,1,0,0.3991433365202236,0.8555555555555555,0.0988175675675675,0,0.7531631520532742,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1,0.0,0.0,1,0
39
+ STU1036,0.0,1,2025-06-18 22:30:00,0.0,0.2222222222222222,0.8999999999999999,0.0,0.75,0.2666666666666666,Video Lesson Physics,0.780568739243086,0.0744037756165882,1.0,2,0,0.3231057026679597,0.9000000000000001,0.0118243243243243,1,0.0011098779134295,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0,1.0,0.0,0,1
40
+ STU1137,1.0000000000000002,1,2025-05-08 21:30:00,0.6272727272727272,0.3333333333333333,0.8222222222222222,0.0,0.25,0.9333333333333332,Interactive Exercise Ancient Civilizations,0.4761078569851258,0.1083383983410264,0.8571428571428572,3,0,0.0459793288907981,0.8222222222222222,0.2533783783783784,1,0.4953755086940437,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,2.0,1.0,0,1
41
+ STU1034,1.0000000000000002,0,2024-08-04 19:15:00,0.6,0.5555555555555556,0.977777777777778,1.0,0.5,0.2666666666666666,Audio Lecture Literature,0.0221610398186905,0.497156751025593,0.5714285714285712,6,1,0.0774457251149333,0.977777777777778,0.3716216216216216,0,0.750832408435072,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,1
42
+ STU1004,0.1999999999999999,0,2025-04-01 22:15:00,0.9818181818181818,0.5555555555555556,0.8111111111111111,0.625,0.75,0.6000000000000001,Audio Lecture Modern History,0.4122156422994131,0.7469371277223724,1.0,1,0,0.0462177584508725,0.811111111111111,0.5844594594594595,0,0.5929522752497225,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
43
+ STU1111,0.1999999999999999,1,2024-10-14 19:15:00,0.0181818181818181,0.3333333333333333,0.9222222222222224,0.5912314024085137,0.5,0.3999999999999999,Interactive Exercise Vocabulary,0.2184673302996833,0.2683455788349927,0.5714285714285712,0,0,0.3601496748599807,0.9222222222222224,0.027027027027027,2,0.2119866814650388,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,0.0,1,0
44
+ STU1179,0.3999999999999999,0,2025-02-16 16:30:00,0.1727272727272727,0.6666666666666665,0.7111111111111111,0.375,0.25,0.4666666666666667,Interactive Exercise Algebra,0.3099497570088037,0.5203153578770995,0.1428571428571428,6,1,0.2579594351767347,0.7111111111111111,0.1579391891891892,0,0.0588235294117647,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0,0.0,2.0,0,0
45
+ STU1022,0.1999999999999999,0,2025-05-15 15:15:00,0.6818181818181818,0.8888888888888888,0.7999999999999999,0.0,0.5,0.1333333333333333,Audio Lecture Modern History,0.098896608886692,0.8721432131441298,0.0,3,0,0.1073790874161311,0.7999999999999999,0.6326013513513514,0,0.6052534221235665,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,2.0,0,1
46
+ STU1049,0.1999999999999999,0,2024-12-22 21:30:00,0.2636363636363636,0.2222222222222222,0.8555555555555555,0.5912314024085137,1.0,0.8666666666666667,Interactive Exercise Vocabulary,0.2478926713512718,0.7149425802800202,0.8571428571428572,6,1,0.0751960902885887,0.8555555555555555,0.085304054054054,2,0.2175360710321865,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,0.0,1,0
47
+ STU1010,1.0000000000000002,1,2025-06-02 21:00:00,0.8999999999999999,0.6666666666666665,0.9111111111111112,0.5681836543433301,0.5,1.0,Video Lesson Physics,0.1199020962243293,0.8529707467367437,0.8571428571428572,0,0,0.0610791238299345,0.9111111111111112,0.6309121621621622,0,0.2397336293007769,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1,0.0,1.0,1,0
48
+ STU1196,0.3999999999999999,0,2025-03-21 18:45:00,0.4909090909090908,0.8888888888888888,1.0,0.375,1.0,0.2,Video Lesson Algebra,0.7471945889417827,0.4262280404364546,0.4285714285714284,4,0,0.1459892533303274,1.0,0.472972972972973,0,0.1576026637069922,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,2.0,2.0,1,0
49
+ STU1060,0.5999999999999999,0,2025-04-15 21:15:00,0.1272727272727272,0.6666666666666665,0.9111111111111112,0.5847013960703209,0.0,0.5333333333333334,Interactive Exercise Algorithms,0.0838563414768952,0.8772177576113912,0.8571428571428572,1,0,0.3138447300713097,0.9111111111111112,0.1283783783783783,1,0.1664816870144283,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,0
50
+ STU1078,1.0000000000000002,1,2025-04-23 17:30:00,0.6909090909090908,0.5555555555555556,0.7999999999999999,0.0,0.0,0.4666666666666667,Interactive Exercise Vocabulary,0.463388508770417,0.5596722779247028,0.2857142857142856,2,0,0.0672438977208595,0.7999999999999999,0.4222972972972973,1,0.2663706992230854,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,0.0,1.0,0,1
51
+ STU1182,0.5999999999999999,0,2024-04-05 19:30:00,0.9545454545454544,0.4444444444444445,0.8555555555555555,1.0,0.25,0.9333333333333332,Video Lesson World War,0.9279368332894496,0.6973685141024625,0.5714285714285712,4,0,0.0380282294626315,0.8555555555555555,0.4721283783783784,2,0.2386237513873474,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,1.0,0.0,1,1
52
+ STU1102,0.1999999999999999,1,2024-09-13 21:30:00,0.7909090909090908,0.7777777777777777,0.7777777777777778,0.625,0.75,0.8,Audio Lecture Modern History,0.0541301191185069,0.3556697927728817,0.8571428571428572,4,0,0.0813651903791847,0.7777777777777778,0.641891891891892,0,0.4961154273029966,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,0
53
+ STU1162,0.0,1,2025-04-30 22:45:00,0.6272727272727272,0.5555555555555556,0.7999999999999999,1.0,0.25,0.8,Interactive Exercise Biology,0.8852629747698798,0.4603281445721182,1.0,2,0,0.0741139890833395,0.7999999999999999,0.3868243243243243,2,0.4017758046614873,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1,1.0,1.0,1,1
54
+ STU1083,0.3999999999999999,0,2024-04-20 17:00:00,0.5272727272727272,1.0,0.8222222222222222,0.375,1.0,0.0,Interactive Exercise Algebra,0.9719071470554048,0.6561177491926868,0.2857142857142856,5,1,0.1531392842895073,0.8222222222222222,0.5608108108108109,0,0.345541990381058,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,1.0,1,0
55
+ STU1045,0.1999999999999999,0,2025-05-07 16:00:00,0.7636363636363636,0.4444444444444445,0.977777777777778,0.5847013960703209,0.75,0.8666666666666667,Interactive Exercise Algorithms,0.8764148874962948,0.6976298620700548,0.1428571428571428,2,0,0.0488227255190223,0.977777777777778,0.3834459459459459,1,0.5837957824639289,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,1.0,1,0
56
+ STU1132,0.5999999999999999,1,2025-05-13 20:00:00,0.2727272727272727,0.7777777777777777,0.7,0.6549896587383661,1.0,0.1333333333333333,Video Lesson Grammar,0.2017747564177291,0.5702238525564925,0.714285714285714,1,0,0.2119738212836626,0.7,0.2567567567567568,2,0.4384017758046615,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,0.0,0,1
57
+ STU1062,0.0,0,2025-03-27 18:15:00,0.1545454545454545,0.5555555555555556,0.8555555555555555,0.625,0.75,0.2666666666666666,Interactive Exercise Ancient Civilizations,0.999751898897204,0.6700251659915546,0.4285714285714284,3,0,0.2366697975085482,0.8555555555555555,0.1233108108108108,0,0.4365519792822789,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,2.0,1,0
58
+ STU1093,0.8,0,2025-07-02 22:30:00,0.3909090909090909,0.6666666666666665,0.7888888888888889,0.5681836543433301,1.0,0.2666666666666666,Video Lesson Physics,0.2353119697328168,0.8192941209847273,1.0,2,0,0.1364879989761116,0.788888888888889,0.2998310810810811,2,0.4064927857935627,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1,1.0,0.0,1,0
59
+ STU1035,0.8,1,2025-05-18 16:15:00,0.4999999999999999,0.8888888888888888,0.7999999999999999,0.5681836543433301,0.75,0.0,Video Lesson Physics,0.5334118199438668,0.7306796134847616,0.1428571428571428,6,1,0.1435849572930918,0.7999999999999999,0.4805743243243243,0,0.3662597114317425,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
60
+ STU1061,0.3999999999999999,0,2025-06-24 18:15:00,0.8545454545454545,1.0,0.7,0.5912314024085137,0.5,0.2,Interactive Exercise Vocabulary,0.1737465714942065,0.9561324328176752,0.4285714285714284,1,0,0.0965676124467685,0.7,0.8648648648648649,1,0.4839067702552719,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,2.0,2.0,0,0
61
+ STU1178,0.8,0,2025-03-06 21:15:00,0.5272727272727272,0.4444444444444445,0.977777777777778,0.1742179420889353,0.0,0.0,Video Lesson Algebra,0.671580893639549,0.4349141365957127,0.8571428571428572,3,0,0.0714246463976114,0.977777777777778,0.2736486486486487,2,0.6051054384017758,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,0.0,0,1
62
+ STU1152,0.0,1,2024-05-03 17:15:00,0.5636363636363636,0.7777777777777777,0.9222222222222224,0.5847013960703209,0.25,0.3999999999999999,Video Lesson Programming,0.8009502761050026,0.3595029220529698,0.2857142857142856,4,0,0.1131899058654627,0.9222222222222224,0.472972972972973,2,0.516093229744728,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
63
+ STU1130,0.8,1,2025-05-09 19:15:00,0.8181818181818181,0.7777777777777777,0.977777777777778,0.375,0.75,0.6000000000000001,Interactive Exercise Algebra,0.7812548454605317,0.2922597218493973,0.5714285714285712,4,0,0.0786155349504772,0.977777777777778,0.6621621621621622,2,0.4528301886792452,1.0,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,0.0,1,0
64
+ STU1039,0.3999999999999999,1,2024-02-23 17:45:00,0.609090909090909,0.2222222222222222,0.8555555555555555,0.625,0.75,0.3333333333333333,Audio Lecture Modern History,0.5784410904302985,0.7305150380584934,0.2857142857142856,4,0,0.0330081543722089,0.8555555555555555,0.1815878378378378,0,0.8718091009988901,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
65
+ STU1169,0.0,0,2025-02-14 21:30:00,0.1999999999999999,0.7777777777777777,0.8777777777777778,0.375,0.5,0.6666666666666667,Audio Lecture Calculus,0.7574014153590986,0.0387008588734111,0.8571428571428572,4,0,0.2675397727417134,0.8777777777777778,0.2027027027027027,1,0.1048834628190898,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,0.0,1,0
66
+ STU1163,0.5999999999999999,0,2025-04-29 21:15:00,0.1181818181818181,1.0,0.7666666666666666,0.5912314024085137,0.75,0.0666666666666667,Video Lesson Grammar,0.2149865273803909,0.5515320928153924,0.8571428571428572,1,0,0.4728922012685383,0.7666666666666667,0.1807432432432432,2,0.2608213096559378,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
67
+ STU1071,0.1999999999999999,0,2025-01-18 17:15:00,0.8181818181818181,0.2222222222222222,0.8999999999999999,0.5912314024085137,0.25,0.7333333333333334,Interactive Exercise Vocabulary,0.5395308031186095,0.1620419707429955,0.2857142857142856,5,1,0.0230495809225011,0.9000000000000001,0.2398648648648648,0,0.5529966703662597,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,0
68
+ STU1180,0.0,0,2025-04-05 21:30:00,0.4727272727272726,0.4444444444444445,0.8444444444444444,0.5847013960703209,0.0,0.3999999999999999,Video Lesson Programming,0.5998070977990106,0.3671534600087269,0.8571428571428572,5,1,0.0793325144531519,0.8444444444444444,0.2483108108108108,1,0.1176470588235293,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,1.0,1,0
69
+ STU1104,0.8,0,2025-06-16 15:15:00,0.4454545454545454,0.8888888888888888,0.7777777777777778,0.375,0.25,0.4666666666666667,Video Lesson Algebra,0.3941452429342989,0.5381183709118588,0.0,0,0,0.1592332569045487,0.7777777777777778,0.4349662162162162,0,0.1365149833518312,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
70
+ STU1134,0.3999999999999999,0,2024-06-29 19:00:00,0.3181818181818181,0.3333333333333333,1.0,0.625,0.25,0.1333333333333333,Interactive Exercise Ancient Civilizations,0.1541879195806367,0.3349567351585688,0.5714285714285712,5,1,0.088493925570314,1.0,0.1385135135135135,0,0.169811320754717,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
71
+ STU1086,1.0000000000000002,1,2024-09-13 21:15:00,0.0909090909090909,0.2222222222222222,0.8555555555555555,0.5912314024085137,0.25,0.6000000000000001,Video Lesson Grammar,0.0899127563010276,0.5516249646953622,0.8571428571428572,4,0,0.1564078639217295,0.8555555555555555,0.0371621621621621,1,0.0554938956714761,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
72
+ STU1005,0.1999999999999999,0,2024-07-14 17:15:00,0.6636363636363636,0.5555555555555556,0.9222222222222224,0.375,0.0,0.8666666666666667,Interactive Exercise Algebra,0.6575863781694877,0.5850497181319968,0.2857142857142856,6,1,0.0700463274177631,0.9222222222222224,0.4070945945945946,0,0.3144654088050315,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
73
+ STU1194,0.5999999999999999,1,2024-12-30 15:15:00,0.8727272727272727,0.4444444444444445,0.7888888888888889,0.5912314024085137,0.75,0.3999999999999999,Video Lesson Grammar,0.3079248658964315,0.7783637005137007,0.0,0,0,0.0421307198825348,0.788888888888889,0.4341216216216216,2,0.3712541620421753,1.0,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,2.0,1,0
74
+ STU1177,1.0000000000000002,1,2025-06-04 22:45:00,0.7909090909090908,0.4444444444444445,0.8333333333333334,0.5912314024085137,0.75,0.6666666666666667,Audio Lecture Literature,0.5165302648769683,0.6312857041311745,1.0,2,0,0.0469944971766338,0.8333333333333333,0.3961148648648649,0,0.295227524972253,0.0,0.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,0
75
+ STU1081,0.3999999999999999,1,2024-12-19 22:45:00,0.4999999999999999,0.5555555555555556,0.8777777777777778,0.1207988624612208,0.25,0.8666666666666667,Video Lesson Grammar,0.4074329431073227,0.1453703219947636,1.0,3,0,0.0922933076972997,0.8777777777777778,0.3158783783783784,0,0.3629300776914539,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,2.0,1.0,0,1
76
+ STU1042,1.0000000000000002,0,2024-10-02 22:00:00,0.7454545454545454,0.3333333333333333,0.9555555555555556,0.0,0.25,0.5333333333333334,Audio Lecture Literature,0.8879926229715808,0.0758193749228285,1.0,2,0,0.0380282293575919,0.9555555555555556,0.2972972972972973,0,0.4001109877913429,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,0.0,2.0,0,1
77
+ STU1114,0.8,0,2025-06-12 22:15:00,0.1636363636363636,0.7777777777777777,0.7111111111111111,0.0,1.0,0.8666666666666667,Video Lesson Programming,0.7663790808151407,0.4695206573089047,1.0,3,0,0.3072297376436429,0.7111111111111111,0.1756756756756756,2,0.0721420643729189,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
78
+ STU1004,0.1999999999999999,0,2023-11-13 15:15:00,0.0454545454545454,0.2222222222222222,0.7111111111111111,0.625,0.25,0.4666666666666667,Video Lesson World War,0.9605329164644928,0.1305403418980681,0.0,0,0,0.211973812022671,0.7111111111111111,0.0244932432432432,0,0.5929522752497225,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,2.0,0,0
79
+ STU1195,0.3999999999999999,0,2025-04-01 16:45:00,0.9909090909090909,0.8888888888888888,0.9333333333333332,0.5912314024085137,0.0,0.0,Video Lesson Grammar,0.2064632042796024,0.0258756522852011,0.1428571428571428,1,0,0.0737593508671026,0.9333333333333332,0.8910472972972974,0,0.6034036256011839,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,2.0,1,0
80
+ STU1128,0.1999999999999999,1,2024-11-08 17:00:00,0.4909090909090908,0.8888888888888888,0.9666666666666666,0.0,1.0,0.6000000000000001,Video Lesson Grammar,0.115165082376858,0.2300868156515395,0.2857142857142856,4,0,0.1459892533303274,0.9666666666666666,0.472972972972973,1,0.1576026637069922,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,0.0,0,1
81
+ STU1073,0.3999999999999999,1,2025-04-15 21:30:00,0.7999999999999999,0.3333333333333333,0.7888888888888889,0.625,0.0,0.5333333333333334,Video Lesson World War,0.5815590307458806,0.1455647876458446,0.8571428571428572,1,0,0.0350699709682756,0.788888888888889,0.3175675675675675,1,0.5396781354051055,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
82
+ STU1149,0.8,0,2024-12-26 20:00:00,0.4909090909090908,0.8888888888888888,0.7777777777777778,0.5912314024085137,0.25,0.3999999999999999,Audio Lecture Literature,0.502395279658993,0.8565515269084977,0.714285714285714,3,0,0.1459892533303274,0.7777777777777778,0.472972972972973,0,0.6362375138734739,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,2.0,2.0,1,0
83
+ STU1103,0.5999999999999999,0,2025-06-23 19:45:00,0.1363636363636363,0.4444444444444445,0.9888888888888888,0.5681836543433301,0.75,0.1333333333333333,Audio Lecture Chemistry,0.3312744672188638,0.2233126629000416,0.5714285714285712,0,0,0.2119738179497055,0.9888888888888888,0.0920608108108108,1,0.3621901590825009,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,0.0,1,0
84
+ STU1090,1.0000000000000002,0,2025-01-01 22:30:00,0.7636363636363636,0.7777777777777777,0.7777777777777778,1.0,0.0,0.2666666666666666,Audio Lecture Literature,0.924121163158115,0.608683679320681,1.0,2,0,0.0842903557270064,0.7777777777777778,0.6216216216216217,1,0.3736588975212727,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,2.0,1,1
85
+ STU1014,0.8,1,2025-05-01 16:30:00,0.7545454545454545,0.6666666666666665,0.9222222222222224,0.5912314024085137,1.0,0.5333333333333334,Audio Lecture Literature,0.6967344336519914,0.1366916308696201,0.1428571428571428,3,0,0.0733576811730414,0.9222222222222224,0.5363175675675677,1,0.2108768035516093,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,0.0,1,0
86
+ STU1087,0.8,1,2024-12-04 20:45:00,0.1636363636363636,0.8888888888888888,0.9555555555555556,0.5847013960703209,0.0,0.8666666666666667,Video Lesson Programming,0.4755514297496868,0.4458960690279354,0.714285714285714,2,0,0.3469197037858838,0.9555555555555556,0.1993243243243243,2,0.0643729189789123,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
87
+ STU1099,0.1999999999999999,1,2025-06-26 15:45:00,0.9454545454545454,0.6666666666666665,0.9333333333333332,1.0,0.5,0.4666666666666667,Video Lesson Grammar,0.5389727679953009,0.9068310888403972,0.0,3,0,0.0579488995010672,0.9333333333333332,0.660472972972973,0,0.2508324084350721,0.0,0.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,0.0,1,1
88
+ STU1106,0.8,0,2024-09-10 18:15:00,0.6818181818181818,0.7777777777777777,0.7555555555555555,1.0,0.0,0.5333333333333334,Interactive Exercise Biology,0.3805373591782654,0.9038559500606316,0.4285714285714284,1,0,0.0943047453149738,0.7555555555555555,0.5608108108108109,0,0.4095449500554938,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,1
89
+ STU1184,0.3999999999999999,0,2025-06-27 17:00:00,0.1545454545454545,0.5555555555555556,0.8444444444444444,0.625,0.25,0.3333333333333333,Interactive Exercise Ancient Civilizations,0.0352295821414593,0.0085139403873748,0.2857142857142856,4,0,0.2366697975085482,0.8444444444444444,0.1233108108108108,0,0.0488346281908989,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,1.0,1.0,1,0
90
+ STU1038,0.0,1,2024-11-02 19:15:00,0.1363636363636363,0.8888888888888888,0.7333333333333333,0.625,0.5,0.2,Interactive Exercise Ancient Civilizations,0.04332716332248,0.633162199718396,0.5714285714285712,5,1,0.3897848655048975,0.7333333333333333,0.1765202702702702,2,0.0643729189789123,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
91
+ STU1109,0.3999999999999999,0,2025-06-18 18:15:00,0.209090909090909,0.5555555555555556,0.7555555555555555,0.375,0.25,0.8666666666666667,Video Lesson Algebra,0.4731776123086155,0.7827902660005365,0.4285714285714284,2,0,0.1917680190505113,0.7555555555555555,0.1537162162162162,0,0.0776914539400665,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,2.0,1,0
92
+ STU1160,0.5999999999999999,1,2025-04-23 17:30:00,0.2454545454545454,0.3333333333333333,0.8222222222222222,0.625,0.5,0.1333333333333333,Audio Lecture Modern History,0.2013385801297555,0.2062260742804656,0.2857142857142856,2,0,0.1098526097637762,0.8222222222222222,0.1114864864864864,1,0.0632630410654827,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
93
+ STU1066,0.3999999999999999,1,2025-03-15 16:15:00,0.4454545454545454,1.0,0.7,0.625,0.5,0.6000000000000001,Interactive Exercise Ancient Civilizations,0.0520714765706797,0.997306502962102,0.1428571428571428,5,1,0.178069173393308,0.7,0.4847972972972973,1,0.1453940066592675,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,0.0,0,0
94
+ STU1159,0.0,1,2025-04-17 15:00:00,0.3545454545454545,0.6666666666666665,0.7,0.625,1.0,0.3333333333333333,Video Lesson World War,0.4970724698649821,0.6033949399699028,0.0,3,0,0.1484698755046771,0.7,0.2761824324324324,2,0.2835738068812431,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,0.0,0,0
95
+ STU1098,0.1999999999999999,1,2024-11-29 20:15:00,0.0999999999999999,0.2222222222222222,0.8111111111111111,0.0,0.25,0.1333333333333333,Video Lesson Physics,0.9608184809245712,0.0959806308299899,0.714285714285714,4,0,0.1484698711846809,0.811111111111111,0.0396959459459459,2,0.4450610432852386,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0,0.0,0.0,0,1
96
+ STU1101,1.0000000000000002,0,2025-06-22 17:30:00,0.2363636363636363,0.8888888888888888,0.9111111111111112,0.5847013960703209,0.75,0.0,Video Lesson Programming,0.0668025338896292,0.6963024171446645,0.2857142857142856,6,1,0.2675397737064,0.9111111111111112,0.2601351351351352,0,0.0921198668146503,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,0.0,1,0
97
+ STU1148,1.0000000000000002,0,2025-04-13 18:15:00,0.1999999999999999,0.2222222222222222,0.8777777777777778,0.0673797828335063,0.25,0.1333333333333333,Video Lesson Physics,0.5221223618549242,0.0602062893752324,0.4285714285714284,6,1,0.0938961700942147,0.8777777777777778,0.0675675675675675,1,0.0876803551609322,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
98
+ STU1003,0.8,1,2025-06-20 15:00:00,0.9818181818181818,0.8888888888888888,0.8111111111111111,0.625,0.75,0.1333333333333333,Video Lesson World War,0.320523694056688,0.1477637206859045,0.0,4,0,0.0744716334234509,0.811111111111111,0.883445945945946,1,0.8706992230854607,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
99
+ STU1047,0.0,1,2025-05-04 20:30:00,0.6636363636363636,0.6666666666666665,0.8333333333333334,1.0,0.5,0.8,Video Lesson Algebra,0.7510430679411558,0.1276554701954296,0.714285714285714,6,1,0.0834357139031044,0.8333333333333333,0.4771959459459459,0,0.4334073251942286,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,0.0,1,1
100
+ STU1089,0.5999999999999999,0,2024-10-17 20:15:00,0.3727272727272727,0.6666666666666665,0.7999999999999999,0.625,0.0,0.3999999999999999,Video Lesson World War,0.7530187183365914,0.5859029228243289,0.714285714285714,3,0,0.1422439984895389,0.7999999999999999,0.2880067567567568,2,0.336662967073622,1.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
101
+ STU1167,0.0,0,2025-06-15 21:45:00,0.5363636363636363,1.0,0.7111111111111111,1.0,0.75,0.0,Video Lesson World War,0.7893580812552008,0.3811237015088908,0.8571428571428572,6,1,0.1507707440950834,0.7111111111111111,0.5692567567567568,0,0.318534961154273,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,1.0,0.0,0,1
102
+ STU1085,0.0,0,2024-10-17 18:45:00,0.509090909090909,0.5555555555555556,0.8444444444444444,1.0,1.0,0.9333333333333332,Video Lesson Grammar,0.8848119967564771,0.7230077728671821,0.4285714285714284,3,0,0.0907390153088559,0.8444444444444444,0.3209459459459459,1,0.2397336293007769,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,1.0,1,1
103
+ STU1189,1.0000000000000002,1,2025-03-02 20:00:00,0.2181818181818181,0.4444444444444445,0.7,0.5847013960703209,0.75,0.5333333333333334,Audio Lecture Data Structures,0.805779872236121,0.5860663676351006,0.714285714285714,6,1,0.1531392818861357,0.7,0.1300675675675675,0,0.1165371809100999,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0.0,0.0,0,0
104
+ STU1175,0.0,0,2025-06-17 20:45:00,0.5818181818181818,0.5555555555555556,0.9888888888888888,0.5912314024085137,0.0,0.0,Video Lesson Grammar,0.0834336676290356,0.186259618686583,0.714285714285714,1,0,0.0798169606669225,0.9888888888888888,0.3614864864864865,1,0.1498335183129855,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
105
+ STU1067,0.3999999999999999,0,2024-12-29 18:15:00,0.609090909090909,0.3333333333333333,0.8777777777777778,0.375,1.0,0.4666666666666667,Interactive Exercise Algebra,0.7713209186249291,0.6592753500528468,0.4285714285714284,6,1,0.04744086966104,0.8777777777777778,0.2466216216216216,1,0.1587125416204217,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
106
+ STU1151,0.3999999999999999,1,2025-04-28 17:30:00,0.609090909090909,0.8888888888888888,0.977777777777778,1.0,0.0,0.8,Video Lesson Grammar,0.0051463801049845,0.3219907415819122,0.2857142857142856,0,0,0.1196044461051956,0.977777777777778,0.5717905405405406,2,0.3618201997780245,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,2.0,1,1
107
+ STU1125,1.0000000000000002,0,2025-05-29 16:30:00,0.6909090909090908,0.6666666666666665,0.7222222222222222,0.625,0.5,0.2666666666666666,Audio Lecture Modern History,0.7686346332670541,0.2495534803915156,0.1428571428571428,3,0,0.0801662125900501,0.7222222222222222,0.4949324324324324,0,0.1886792452830188,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
108
+ STU1188,0.5999999999999999,1,2024-10-02 22:30:00,0.0545454545454545,0.6666666666666665,0.6666666666666666,0.5681836543433301,0.0,0.0666666666666667,Audio Lecture Chemistry,0.4579452966893717,0.2886455481256465,1.0,2,0,0.4759120807248974,0.6666666666666666,0.081081081081081,0,0.2003329633740288,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0,1.0,1.0,0,0
109
+ STU1012,0.5999999999999999,1,2025-04-25 19:45:00,0.9727272727272726,1.0,0.7666666666666666,0.375,0.75,0.2666666666666666,Interactive Exercise Algebra,0.7282514176574155,0.7639109794034082,0.5714285714285712,4,0,0.0846945454436863,0.7666666666666667,0.9746621621621624,2,0.2774694783573806,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,1.0,1,0
110
+ STU1166,0.1999999999999999,1,2024-02-14 22:30:00,0.7181818181818181,0.8888888888888888,0.6888888888888889,0.375,0.75,0.0,Audio Lecture Calculus,0.6749396270385014,0.3180004377626736,1.0,2,0,0.1020905895469944,0.6888888888888889,0.6630067567567568,2,0.3921568627450981,1.0,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0.0,1.0,0,0
111
+ STU1018,1.0000000000000002,0,2024-09-11 17:00:00,0.5818181818181818,1.0,0.7888888888888889,1.0,1.0,1.0,Audio Lecture Chemistry,0.4872194626850976,0.0058985050143313,0.2857142857142856,2,0,0.1398882621077272,0.788888888888889,0.6114864864864865,2,0.1853496115427303,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,0.0,1,1
112
+ STU1019,0.3999999999999999,0,2025-04-06 22:45:00,0.9090909090909092,0.7777777777777777,0.8666666666666667,0.5681836543433301,1.0,0.0666666666666667,Video Lesson Physics,0.2091923119954345,0.868276856073035,1.0,6,1,0.0705332144380654,0.8666666666666667,0.7297297297297298,2,0.686644469108398,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1,1.0,0.0,1,0
113
+ STU1059,0.1999999999999999,1,2024-09-18 19:30:00,0.3545454545454545,0.0,0.1444444444444445,0.5681836543433301,0.0,0.6666666666666667,Interactive Exercise Biology,0.3948864234287349,0.5687780347297534,0.5714285714285712,2,0,0.0123899895055672,0.1444444444444445,0.0278716216216216,1,0.3013318534961154,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0,2.0,2.0,0,0
114
+ STU1029,0.5999999999999999,0,2025-04-02 21:30:00,0.0272727272727272,0.7777777777777777,0.8777777777777778,1.0,0.0,1.0,Audio Lecture Data Structures,0.3560479024967615,0.583860696511781,0.8571428571428572,2,0,0.6735986276974907,0.8777777777777778,0.0743243243243243,0,0.097669256381798,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,2.0,1,1
115
+ STU1055,0.8,1,2025-04-11 17:45:00,0.7,0.7777777777777777,0.8222222222222222,0.625,0.25,0.3999999999999999,Video Lesson World War,0.3073348536793754,0.7051310433971978,0.2857142857142856,4,0,0.0919002686343527,0.8222222222222222,0.5743243243243243,2,0.4324824269330374,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,1.0,0.0,1,0
116
+ STU1028,0.1999999999999999,1,2025-05-13 16:15:00,0.5363636363636363,0.7777777777777777,0.8111111111111111,0.3344751809720789,0.75,0.6000000000000001,Interactive Exercise Algebra,0.2630913902310068,0.1193146249188182,0.1428571428571428,1,0,0.1185585969772098,0.811111111111111,0.4527027027027027,2,0.5235849056603774,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,1.0,2.0,1,1
117
+ STU1140,0.0,1,2024-09-18 20:00:00,0.5363636363636363,0.3333333333333333,0.8666666666666667,0.5912314024085137,0.0,0.1333333333333333,Video Lesson Grammar,0.7303054770558202,0.1851266429469031,0.714285714285714,2,0,0.0541343027414627,0.8666666666666667,0.2195945945945946,1,0.4961154273029966,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,2.0,0.0,1,0
118
+ STU1032,1.0000000000000002,1,2025-06-05 15:45:00,0.4818181818181818,1.0,0.8666666666666667,0.5847013960703209,0.5,0.1333333333333333,Interactive Exercise Algorithms,0.904528548419776,0.71430965510493,0.0,3,0,0.1661098615267832,0.8666666666666667,0.5185810810810811,2,0.2003329633740288,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
119
+ STU1165,1.0000000000000002,1,2025-03-25 19:45:00,0.4181818181818181,0.8888888888888888,0.8111111111111111,0.625,0.5,0.5333333333333334,Audio Lecture Modern History,0.1905722150675996,0.281206242727938,0.5714285714285712,1,0,0.1683148593351719,0.811111111111111,0.4121621621621621,2,0.1331853496115427,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
120
+ STU1000,0.0,1,2024-09-25 15:30:00,0.4363636363636363,0.4444444444444445,0.6888888888888889,0.5847013960703209,0.25,0.4666666666666667,Audio Lecture Data Structures,0.3478720728004227,0.6738459925422966,0.0,2,0,0.0855133768257188,0.6888888888888889,0.2314189189189189,2,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,0.0,2.0,0,0
121
+ STU1001,0.1999999999999999,1,2025-06-10 19:30:00,0.1454545454545454,0.6666666666666665,0.977777777777778,0.5847013960703209,1.0,0.1333333333333333,Audio Lecture Data Structures,0.0810566746333176,0.3464105490123374,0.5714285714285712,1,0,0.2889112909098579,0.977777777777778,0.1402027027027027,0,0.1361450240473548,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
122
+ STU1064,0.1999999999999999,0,2025-01-18 19:45:00,0.7818181818181817,0.7777777777777777,1.0,0.625,0.0,0.7333333333333334,Interactive Exercise Ancient Civilizations,0.6105559126258934,0.6520067508910071,0.5714285714285712,5,1,0.0823199318470881,1.0,0.6351351351351352,2,0.7142064372918979,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,1.0,1,0
123
+ STU1051,0.5999999999999999,0,2024-04-23 20:00:00,0.409090909090909,0.4444444444444445,0.9111111111111112,0.625,0.25,1.0,Video Lesson World War,0.3151205368639675,0.5581962140132246,0.714285714285714,1,0,0.0907390150027074,0.9111111111111112,0.21875,2,0.1759156492785794,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,0.0,1,0
124
+ STU1013,0.3999999999999999,0,2025-01-16 19:30:00,0.9636363636363636,0.1111111111111111,0.0333333333333333,0.5681836543433301,0.0,0.7333333333333334,Interactive Exercise Biology,0.6742409023430315,0.980171375427846,0.5714285714285712,3,0,0.0088706823348944,0.0333333333333333,0.1824324324324324,0,0.413984461709212,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0,0.0,0.0,0,0
125
+ STU1002,0.0,1,2025-05-10 15:00:00,0.2818181818181817,0.4444444444444445,0.9444444444444444,0.5681836543433301,1.0,0.3999999999999999,Audio Lecture Chemistry,0.2137526852826897,0.8698569933581745,0.0,5,1,0.1252367236968581,0.9444444444444444,0.1596283783783784,1,0.5952645209027007,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
126
+ STU1133,0.0,1,2024-11-28 22:15:00,0.5272727272727272,0.2222222222222222,0.7222222222222222,0.0139607032057917,0.75,0.2,Video Lesson Programming,0.871018523976302,0.8339837777883972,1.0,3,0,0.038738791240853,0.7222222222222222,0.1587837837837838,2,0.3226045135035146,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,2.0,2.0,0,1
127
+ STU1053,0.1999999999999999,1,2024-12-01 17:00:00,0.5272727272727272,0.7777777777777777,0.7111111111111111,0.3878942605997935,0.25,0.4666666666666667,Interactive Exercise Algorithms,0.8122981896655268,0.0912777811070014,0.2857142857142856,6,1,0.120453429132749,0.7111111111111111,0.4459459459459459,1,0.3046614872364039,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,2.0,1.0,0,1
128
+ STU1097,0.8,0,2025-02-20 16:00:00,0.8909090909090909,0.7777777777777777,0.8111111111111111,0.375,0.25,0.0666666666666667,Interactive Exercise Algebra,0.0234309095259943,0.6387940621461871,0.1428571428571428,3,0,0.0720299404599911,0.811111111111111,0.7162162162162163,0,0.517573066962634,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,1.0,0.0,1,0
129
+ STU1075,0.3999999999999999,1,2025-06-29 16:45:00,0.4272727272727272,0.4444444444444445,0.6666666666666666,0.625,0.0,0.8,Interactive Exercise Ancient Civilizations,0.522227639715337,0.6764842932711569,0.1428571428571428,6,1,0.0871941376439511,0.6666666666666666,0.2271959459459459,2,0.1065482796892341,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,1.0,2.0,0,0
130
+ STU1041,0.5999999999999999,1,2025-01-29 15:45:00,0.6181818181818182,0.5555555555555556,0.7111111111111111,0.625,0.5,0.2666666666666666,Interactive Exercise Ancient Civilizations,0.6777435845094765,0.9143755920941278,0.0,2,0,0.0751960913845641,0.7111111111111111,0.3817567567567568,0,0.1653718091009988,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,1.0,0.0,0,0
131
+ STU1015,0.5999999999999999,1,2025-02-09 19:00:00,0.7545454545454545,0.7777777777777777,0.9111111111111112,1.0,0.75,0.6000000000000001,Video Lesson Grammar,0.4043075826362853,0.5023096150736766,0.5714285714285712,6,1,0.0853073486969451,0.9111111111111112,0.6148648648648649,0,0.2130965593784683,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,0.0,1,1
132
+ STU1088,0.0,1,2024-06-15 19:00:00,0.8181818181818181,0.2222222222222222,0.8666666666666667,0.625,0.5,0.2,Audio Lecture Modern History,0.5591290975887796,0.1919013514636648,0.5714285714285712,5,1,0.0230495809225011,0.8666666666666667,0.2398648648648648,1,0.279134295227525,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
133
+ STU1123,0.5999999999999999,0,2025-01-09 22:45:00,0.0181818181818181,0.4444444444444445,0.7555555555555555,0.375,0.0,0.7333333333333334,Interactive Exercise Algebra,0.5830720436996023,0.4880820685544728,1.0,3,0,0.4527595914485469,0.7555555555555555,0.0371621621621621,1,0.1498335183129855,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,2.0,1,0
134
+ STU1076,0.3999999999999999,1,2024-09-23 15:45:00,0.5727272727272726,0.8888888888888888,0.8777777777777778,0.5681836543433301,0.5,0.0666666666666667,Video Lesson Physics,0.5904186100356311,0.1276075351246515,0.0,0,0,0.1267219494378041,0.8777777777777778,0.5413851351351352,1,0.3007769145394007,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1,0.0,1.0,1,0
135
+ STU1021,0.8,1,2025-05-17 18:45:00,0.4545454545454545,1.0,0.9333333333333332,0.5847013960703209,1.0,0.2666666666666666,Interactive Exercise Algorithms,1.0,0.4825401966746634,0.4285714285714284,5,1,0.1749298540308367,0.9333333333333332,0.4932432432432433,1,0.3551609322974473,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
136
+ STU1181,0.3999999999999999,1,2025-04-15 17:00:00,0.509090909090909,0.6666666666666665,0.8333333333333334,0.625,0.75,0.7333333333333334,Video Lesson World War,0.4625231648447067,0.4155012111996172,0.2857142857142856,1,0,0.1075771831093793,0.8333333333333333,0.3766891891891892,2,0.1664816870144284,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,2.0,2.0,1,0
137
+ STU1079,0.1999999999999999,0,2025-07-02 21:30:00,0.6818181818181818,0.2222222222222222,0.8333333333333334,0.5912314024085137,0.0,0.6666666666666667,Audio Lecture Literature,0.422777903710642,0.6827103850869911,0.8571428571428572,2,0,0.0289330348091874,0.8333333333333333,0.2018581081081081,0,0.1576026637069922,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,0
138
+ STU1127,0.1999999999999999,1,2025-06-27 22:45:00,0.7,0.4444444444444445,0.8666666666666667,0.625,1.0,0.5333333333333334,Video Lesson World War,0.6983410253802127,0.5887288090872417,1.0,4,0,0.0535789210861138,0.8666666666666667,0.3538851351351352,2,0.2859785423603403,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,0.0,1,0
139
+ STU1026,0.1999999999999999,0,2025-07-02 15:15:00,0.4,0.0,0.1777777777777778,0.5681836543433301,0.5,0.2,Video Lesson Physics,0.3334970854332688,0.4290394711353563,0.0,2,0,0.010289991303729,0.1777777777777778,0.0320945945945946,1,0.4080651128375879,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,1.0,0.0,0,0
140
+ STU1113,0.5999999999999999,0,2024-12-31 22:00:00,0.6636363636363636,0.8888888888888888,1.0,0.625,0.0,0.6666666666666667,Video Lesson World War,0.1794776773869556,0.384687359011765,1.0,1,0,0.1102144868737869,1.0,0.6173986486486487,1,0.5493895671476138,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,1.0,1.0,1,0
141
+ STU1070,0.0,1,2025-06-04 21:30:00,0.6272727272727272,0.5555555555555556,0.9444444444444444,0.375,0.5,0.0666666666666667,Audio Lecture Calculus,0.9473182581745272,0.6746167030994392,0.8571428571428572,2,0,0.0741139890833395,0.9444444444444444,0.3868243243243243,0,0.3144654088050315,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
142
+ STU1170,0.5999999999999999,1,2024-05-29 21:45:00,0.6363636363636364,0.3333333333333333,0.9555555555555556,0.0,0.5,0.4666666666666667,Video Lesson Programming,0.0533985705637151,0.6834946702494549,0.8571428571428572,2,0,0.0452759623947767,0.9555555555555556,0.2567567567567568,2,0.2336293007769145,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
143
+ STU1116,0.8,1,2023-12-29 15:15:00,0.1727272727272727,0.3333333333333333,0.7666666666666666,0.5847013960703209,0.75,0.1333333333333333,Video Lesson Programming,0.3870150861677275,0.4620268990245569,0.0,4,0,0.1429953951748693,0.7666666666666667,0.0844594594594594,1,0.1409544950055493,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
144
+ STU1009,0.0,0,2025-02-25 22:45:00,0.209090909090909,1.0,0.9111111111111112,0.625,0.5,0.1333333333333333,Audio Lecture Modern History,0.4235003797716757,0.4303233547082236,1.0,1,0,0.3264733594137085,0.9111111111111112,0.2652027027027027,1,0.1148723640399556,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
145
+ STU1191,0.1999999999999999,1,2025-01-23 21:15:00,0.9727272727272726,1.0,0.7555555555555555,0.5681836543433301,0.25,0.0,Video Lesson Physics,0.4047094298661965,0.3751864629481443,0.8571428571428572,3,0,0.0846945454436863,0.7555555555555555,0.9746621621621624,0,0.4750277469478356,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1,2.0,0.0,1,0
146
+ STU1138,0.8,0,2024-07-09 21:00:00,0.7999999999999999,0.5555555555555556,0.9333333333333332,0.375,1.0,1.0,Interactive Exercise Algebra,0.9615527079247134,0.2352578875846451,0.8571428571428572,1,0,0.0577499521995556,0.9333333333333332,0.4831081081081081,0,0.6267110617832038,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,0
147
+ STU1095,0.5999999999999999,1,2024-07-31 16:30:00,0.109090909090909,0.3333333333333333,0.6888888888888889,0.5847013960703209,0.25,0.6666666666666667,Video Lesson Programming,0.6755493167680068,0.2495566811782675,0.1428571428571428,2,0,0.1917680159890264,0.6888888888888889,0.0608108108108108,1,0.6356825749167592,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,1.0,0.0,0,0
148
+ STU1001,0.1999999999999999,1,2025-04-21 19:15:00,0.9545454545454544,1.0,1.0,0.5847013960703209,0.5,0.2,Interactive Exercise Algorithms,0.9649903744414844,0.1401792249302386,0.5714285714285712,0,0,0.0863464504195475,1.0,0.9577702702702704,1,0.4779874213836478,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
149
+ STU1176,0.8,1,2025-06-25 17:45:00,0.918181818181818,0.8888888888888888,0.8888888888888888,0.5847013960703209,0.25,0.4666666666666667,Audio Lecture Data Structures,0.5208156799446504,0.4969171641378953,0.2857142857142856,2,0,0.0798169610728097,0.8888888888888888,0.8302364864864865,2,0.605623381428043,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
150
+ STU1020,0.8,1,2025-02-16 22:15:00,0.1181818181818181,0.4444444444444445,0.7666666666666666,0.4947324198552225,1.0,0.8,Interactive Exercise Biology,0.439314066195212,0.4303324328505092,1.0,6,1,0.2313011048871269,0.7666666666666667,0.0836148648648648,1,0.1048834628190898,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1,2.0,0.0,1,1
151
+ STU1052,1.0000000000000002,0,2024-04-21 16:00:00,0.1999999999999999,0.2222222222222222,0.7333333333333333,0.0,0.0,0.8,Audio Lecture Calculus,0.4892865365932068,0.62388281365405,0.1428571428571428,6,1,0.0938961700942147,0.7333333333333333,0.0675675675675675,2,0.2708102108768035,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,0.0,0,1
152
+ STU1174,0.3999999999999999,0,2024-04-02 16:15:00,0.5272727272727272,0.8888888888888888,0.9222222222222224,0.5847013960703209,0.75,0.0666666666666667,Interactive Exercise Algorithms,0.3081547237951205,0.7772314840074368,0.1428571428571428,1,0,0.1367963567111281,0.9222222222222224,0.5033783783783784,2,0.3285238623751387,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,1.0,1,0
153
+ STU1107,0.1999999999999999,0,2025-05-09 21:30:00,0.0999999999999999,0.3333333333333333,0.6888888888888889,0.375,0.25,0.0666666666666667,Video Lesson Algebra,0.7442442619766683,0.5540012960382985,0.8571428571428572,4,0,0.2013898254110027,0.6888888888888889,0.0574324324324324,0,0.0244173140954495,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0,1.0,1.0,0,0
154
+ STU1131,0.0,0,2025-06-27 20:30:00,0.2909090909090909,0.2222222222222222,0.7,0.5847013960703209,0.5,0.5333333333333334,Video Lesson Programming,0.4429204525630629,0.0165636411853334,0.714285714285714,4,0,0.0690899417351965,0.7,0.0929054054054054,0,0.5455049944506104,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,2.0,2.0,0,0
155
+ STU1027,0.8,0,2023-10-25 15:45:00,0.2636363636363636,0.7777777777777777,0.8888888888888888,0.5681836543433301,0.5,0.0,Audio Lecture Chemistry,0.3749982024243721,0.7381107329569581,0.0,2,0,0.217672893260044,0.8888888888888888,0.25,2,0.4827968923418424,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1,2.0,1.0,1,0
156
+ STU1136,0.5999999999999999,0,2024-08-03 20:45:00,0.6363636363636364,0.5555555555555556,1.0,0.0,0.0,0.8,Interactive Exercise Biology,0.0390877272021476,0.282656298860882,0.714285714285714,5,1,0.0730589393393073,1.0,0.3918918918918919,0,0.2386237513873474,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0,0.0,2.0,0,1
157
+ STU1197,0.5999999999999999,0,2024-06-21 15:15:00,0.7454545454545454,0.7777777777777777,0.8777777777777778,0.5681836543433301,0.0,0.7333333333333334,Interactive Exercise Biology,0.6916417895675577,0.0173519302820779,0.0,4,0,0.0863464502094683,0.8777777777777778,0.6081081081081082,0,0.6248612652608213,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1,1.0,2.0,1,0
158
+ STU1003,0.8,1,2025-06-19 16:45:00,0.8999999999999999,0.7777777777777777,0.8444444444444444,0.375,1.0,0.4666666666666667,Audio Lecture Calculus,0.0401738067011121,0.7833008583000046,0.1428571428571428,3,0,0.0712747117333943,0.8444444444444444,0.722972972972973,1,0.8706992230854607,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,0.0,1,0
159
+ STU1122,0.0,0,2024-07-03 15:00:00,0.3454545454545454,0.3333333333333333,0.7555555555555555,0.375,0.75,0.5333333333333334,Audio Lecture Calculus,0.1678776395202608,0.1371824991949564,0.0,2,0,0.0823199308824015,0.7555555555555555,0.1486486486486486,0,0.2967073621901591,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
160
+ STU1023,0.5999999999999999,0,2025-01-22 20:00:00,1.0,0.3333333333333333,0.9333333333333332,0.625,1.0,0.7333333333333334,Audio Lecture Modern History,0.6103308603130055,0.4278807889936094,0.714285714285714,2,0,0.0267539779194395,0.9333333333333332,0.3918918918918919,0,0.2541620421753606,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
161
+ STU1008,0.0,1,2025-04-20 21:00:00,0.3272727272727272,0.5555555555555556,0.7666666666666666,0.2276370217166499,1.0,0.9333333333333332,Video Lesson Physics,0.1080548242106633,0.905344410394646,0.8571428571428572,6,1,0.1346646694857505,0.7666666666666667,0.2195945945945946,1,0.2330743618201997,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1,2.0,0.0,1,1
162
+ STU1044,0.5999999999999999,1,2025-06-30 16:45:00,0.5545454545454545,1.0,0.7333333333333333,0.5912314024085137,0.75,0.0,Video Lesson Grammar,0.03995183183426,0.5733476355000872,0.1428571428571428,0,0,0.1462338220297057,0.7333333333333333,0.5861486486486487,1,0.1753607103218646,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
163
+ STU1117,0.1999999999999999,0,2024-07-13 16:00:00,0.8454545454545453,0.3333333333333333,0.9888888888888888,0.5847013960703209,0.75,0.3999999999999999,Interactive Exercise Algorithms,0.3271705195184051,0.3168861230398674,0.1428571428571428,5,1,0.0328680310642866,0.9888888888888888,0.3344594594594594,0,0.2502774694783574,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,0.0,1,0
164
+ STU1172,0.3999999999999999,0,2023-12-11 21:15:00,0.6636363636363636,0.2222222222222222,0.8999999999999999,1.0,0.5,1.0,Video Lesson World War,0.8031124435119377,0.0237170783603136,0.8571428571428572,0,0,0.0298781679617393,0.9000000000000001,0.1967905405405405,0,0.1598224195338512,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,1
165
+ STU1115,0.0,0,2025-05-14 17:15:00,0.6,0.7777777777777777,0.8222222222222222,0.5681836543433301,0.5,0.7333333333333334,Audio Lecture Chemistry,0.8574346061979541,0.4306179469511907,0.2857142857142856,2,0,0.1066909639846726,0.8222222222222222,0.5000000000000001,2,0.3523862375138734,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1,1.0,0.0,1,0
166
+ STU1135,0.8,1,2024-10-16 21:00:00,0.5363636363636363,0.7777777777777777,0.8999999999999999,1.0,0.25,1.0,Interactive Exercise Vocabulary,0.6010749217962007,0.6871984162963782,0.8571428571428572,2,0,0.1185585969772098,0.9000000000000001,0.4527027027027027,2,0.3290788013318535,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,2.0,1,1
167
+ STU1142,0.0,1,2024-10-26 21:00:00,0.5909090909090908,0.4444444444444445,0.9888888888888888,0.5912314024085137,1.0,0.3999999999999999,Audio Lecture Literature,0.7527334400386756,0.1293020152495637,0.8571428571428572,5,1,0.0637979469627238,0.9888888888888888,0.3032094594594594,1,0.2924528301886793,0.6538461538461533,0.0706596681502631,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
168
+ STU1147,0.0,1,2024-12-26 19:00:00,0.4272727272727272,0.7777777777777777,0.9111111111111112,1.0,1.0,0.6000000000000001,Interactive Exercise Biology,0.7137392075691249,0.6732410565500274,0.5714285714285712,3,0,0.1456846151268925,0.9111111111111112,0.3716216216216216,2,0.3296337402885683,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,1
169
+ STU1192,0.5999999999999999,0,2025-05-16 22:30:00,0.6,0.3333333333333333,0.7111111111111111,1.0,1.0,0.0666666666666667,Interactive Exercise Algorithms,0.3781868637440948,0.039703565386513,1.0,4,0,0.0482004862451941,0.7111111111111111,0.2432432432432432,1,0.4298927118017018,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,2.0,1.0,0,1
170
+ STU1186,0.1999999999999999,0,2025-01-25 20:30:00,0.8636363636363635,0.2222222222222222,0.7777777777777778,0.5912314024085137,0.25,0.2,Audio Lecture Literature,0.5200670883657244,0.7661816669415945,0.714285714285714,5,1,0.0214619822511075,0.7777777777777778,0.2525337837837837,2,0.2053274139844617,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,0.0,1,0
171
+ STU1063,0.3999999999999999,0,2024-11-09 19:30:00,0.7272727272727272,1.0,0.8666666666666667,0.0,0.5,0.0,Interactive Exercise Algebra,0.4841074717903316,0.1262294105178091,0.5714285714285712,5,1,0.1131899062084624,0.8666666666666667,0.7466216216216217,1,0.4002959674435812,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0,1.0,2.0,0,1
172
+ STU1092,0.1999999999999999,0,2024-10-26 19:30:00,0.5545454545454545,1.0,0.7222222222222222,0.0,0.25,0.6000000000000001,Audio Lecture Chemistry,0.4349141129273994,0.959994250875958,0.5714285714285712,5,1,0.1462338220297057,0.7222222222222222,0.5861486486486487,1,0.3607103218645948,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0,0.0,1.0,0,1
173
+ STU1145,0.0,0,2024-12-10 20:45:00,0.8818181818181817,0.2222222222222222,0.9333333333333332,0.5681836543433301,0.75,0.4666666666666667,Interactive Exercise Biology,0.9230334433911632,0.1311104101379464,0.714285714285714,1,0,0.0208684874202917,0.9333333333333332,0.2576013513513513,1,0.4062153163152053,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1,2.0,0.0,1,0
174
+ STU1016,0.0,0,2025-06-29 15:30:00,0.7818181818181817,0.8888888888888888,0.8555555555555555,0.5681836543433301,0.25,0.9333333333333332,Interactive Exercise Biology,0.1525728664292559,0.1879510666780116,0.0,6,1,0.0938961722647597,0.8555555555555555,0.7162162162162163,2,0.218645948945616,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
175
+ STU1031,1.0000000000000002,1,2025-06-19 18:15:00,0.0818181818181818,0.2222222222222222,0.7666666666666666,0.0139607032057917,0.0,0.6666666666666667,Video Lesson World War,0.8895972341592258,0.1603471402706822,0.4285714285714284,3,0,0.1651814347976476,0.7666666666666667,0.0346283783783783,1,0.4705882352941176,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,2.0,0,1
176
+ STU1074,0.1999999999999999,0,2024-10-15 15:15:00,0.0363636363636363,0.2222222222222222,0.8333333333333334,0.0139607032057917,0.0,0.6000000000000001,Audio Lecture Modern History,0.0068908470202531,0.09588092287902,0.0,1,0,0.2278497968541689,0.8333333333333333,0.0219594594594594,0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,2.0,0,1
177
+ STU1054,1.0000000000000002,1,2025-05-28 21:45:00,0.4,0.5555555555555556,0.7777777777777778,0.375,0.0,0.6000000000000001,Video Lesson Algebra,0.9898913882044906,0.6161254638621769,0.8571428571428572,2,0,0.1131899052937965,0.7777777777777778,0.2601351351351352,2,0.3677395486496485,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
178
+ STU1154,0.0,1,2025-06-10 16:00:00,0.8272727272727272,0.6666666666666665,0.7111111111111111,0.5681836543433301,0.75,0.8666666666666667,Audio Lecture Chemistry,0.9865319606859174,0.0823308380383001,0.1428571428571428,1,0,0.0667321230075657,0.7111111111111111,0.5836148648648649,0,0.2253052164261931,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0,1.0,0.0,0,0
179
+ STU1058,0.8,0,2024-10-14 16:30:00,0.609090909090909,0.8888888888888888,0.8444444444444444,0.1207988624612208,0.0,0.2,Audio Lecture Modern History,0.7304846441584761,0.6288960084271715,0.1428571428571428,0,0,0.1196044461051956,0.8444444444444444,0.5717905405405406,2,0.2830188679245283,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,0.0,2.0,0,1
180
+ STU1069,0.0,0,2024-12-30 22:00:00,0.5363636363636363,0.1111111111111111,0.1333333333333333,0.5912314024085137,0.5,0.9333333333333332,Audio Lecture Literature,0.6336044442184678,0.8605347717073197,1.0,0,0,0.0219221556235891,0.1333333333333333,0.1030405405405405,2,0.2175360710321865,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,0.0,2.0,0,0
181
+ STU1199,0.1999999999999999,0,2024-11-27 20:45:00,0.5363636363636363,0.3333333333333333,0.8222222222222222,0.0,0.0,0.1333333333333333,Audio Lecture Chemistry,0.1608818190469297,0.3794942485083676,0.714285714285714,2,0,0.0541343027414627,0.8222222222222222,0.2195945945945946,2,0.1659267480577136,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,2.0,2.0,0,1
182
+ STU1065,1.0000000000000002,1,2025-01-08 21:30:00,0.1818181818181818,0.0,0.1222222222222222,0.625,0.75,0.6666666666666667,Video Lesson World War,0.256283138003569,0.812904722734963,0.8571428571428572,2,0,0.0267539769933403,0.1222222222222222,0.0118243243243243,0,0.0344062153163152,0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,2.0,2.0,0,0
183
+ STU1161,0.1999999999999999,1,2025-01-17 19:45:00,0.6181818181818182,0.1111111111111111,0.2,0.5912314024085137,0.0,0.2,Interactive Exercise Vocabulary,0.8241693154110818,0.8842026612593801,0.5714285714285712,4,0,0.0182053694653317,0.2,0.1182432432432432,2,0.2286348501664817,1.0,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,2.0,0,0
184
+ STU1105,0.5999999999999999,0,2025-03-25 16:30:00,0.1727272727272727,0.8888888888888888,0.7444444444444445,0.0,0.75,0.6000000000000001,Audio Lecture Chemistry,0.5961434098321164,0.1719413964133947,0.1428571428571428,1,0,0.3346021285113116,0.7444444444444445,0.2069256756756756,2,0.4554199038105808,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0,0.0,0.0,0,1
185
+ STU1084,0.0,1,2025-03-11 20:45:00,0.0999999999999999,0.4444444444444445,0.7111111111111111,0.0,0.25,0.0,Video Lesson World War,0.4804435260964554,0.1445808603798793,0.714285714285714,1,0,0.2543097796373245,0.7111111111111111,0.0751689189189189,0,0.0971143174250832,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
186
+ STU1094,0.3999999999999999,0,2024-12-10 21:15:00,0.8818181818181817,0.5555555555555556,0.9666666666666666,0.5912314024085137,0.5,0.4666666666666667,Video Lesson Grammar,0.6296386049369492,0.2796368238821469,0.8571428571428572,1,0,0.052026966334868,0.9666666666666666,0.5287162162162162,0,0.5005549389567148,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
187
+ STU1100,0.8,0,2025-03-29 16:45:00,0.5363636363636363,0.6666666666666665,0.7222222222222222,0.5681836543433301,0.75,0.3333333333333333,Audio Lecture Chemistry,0.2469606545955258,0.2849217624339179,0.1428571428571428,5,1,0.102452523418273,0.7222222222222222,0.3944256756756756,2,0.5327413984461709,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1,2.0,1.0,1,0
188
+ STU1011,0.0,0,2025-05-01 17:15:00,0.8181818181818181,0.5555555555555556,0.7888888888888889,0.5681836543433301,0.5,0.1333333333333333,Interactive Exercise Biology,0.1939902467223051,0.9566010883539868,0.2857142857142856,3,0,0.0563891533392868,0.788888888888889,0.4932432432432433,0,0.4384017758046615,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1,0.0,1.0,1,0
189
+ STU1110,0.3999999999999999,1,2025-06-11 15:15:00,0.3181818181818181,0.4444444444444445,0.7666666666666666,1.0,0.25,0.8,Interactive Exercise Ancient Civilizations,0.6851914065744795,0.870417854860565,0.0,2,0,0.1131899048364636,0.7666666666666667,0.1765202702702702,1,0.290788013318535,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,2.0,1,1
190
+ STU1153,0.1999999999999999,0,2025-05-27 15:30:00,0.2545454545454545,0.3333333333333333,0.8111111111111111,0.5681836543433301,0.75,0.9333333333333332,Interactive Exercise Biology,0.8576235602074411,0.5365510402094337,0.0,1,0,0.1066909624454496,0.811111111111111,0.1148648648648648,2,0.0688124306326304,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1,0.0,2.0,1,0
191
+ STU1040,1.0000000000000002,0,2024-06-22 15:00:00,0.7727272727272727,0.5555555555555556,0.9666666666666666,0.5681836543433301,0.25,0.8666666666666667,Audio Lecture Chemistry,0.8180109679775794,0.0714730856792513,0.0,5,1,0.0598985819777965,0.9666666666666666,0.4679054054054055,1,0.6111727709951905,0.6538461538461533,0.0706596681502631,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1,2.0,0.0,1,0
192
+ STU1007,0.5999999999999999,0,2025-04-24 20:00:00,0.7636363636363636,0.4444444444444445,0.9888888888888888,0.5847013960703209,0.75,0.2666666666666666,Audio Lecture Data Structures,0.7094699720856339,0.0840843830098658,0.714285714285714,3,0,0.0488227255190223,0.9888888888888888,0.3834459459459459,2,0.3157602663706992,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
193
+ STU1198,0.8,0,2025-04-20 21:00:00,0.7454545454545454,0.6666666666666665,0.6888888888888889,1.0,0.5,0.0666666666666667,Interactive Exercise Algebra,0.4066956719081948,0.1766483703646792,0.8571428571428572,6,1,0.0742668949964992,0.6888888888888889,0.5304054054054055,2,0.2019977802441731,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,0.0,0,1
194
+ STU1006,0.1999999999999999,1,2025-06-09 22:30:00,0.3636363636363636,0.4444444444444445,0.8222222222222222,0.6549896587383661,0.5,0.5333333333333334,Audio Lecture Data Structures,0.0530545450103893,0.5071309143770553,1.0,0,0,0.1008419154503486,0.8222222222222222,0.1976351351351351,1,0.3721790603033666,0.6538461538461533,0.0706596681502631,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,1
195
+ STU1072,0.0,1,2025-05-25 22:00:00,0.7727272727272727,0.6666666666666665,0.8111111111111111,1.0,0.25,0.0,Video Lesson Grammar,0.7656757107433999,0.4928297632737241,1.0,6,1,0.0715966775564767,0.811111111111111,0.548141891891892,0,0.3423973362930078,0.0,0.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,1
196
+ STU1000,0.0,1,2025-05-02 19:15:00,0.7181818181818181,0.6666666666666665,0.9444444444444444,0.5847013960703209,0.25,0.2666666666666666,Video Lesson Programming,0.8523252964889587,0.7984743358967872,0.5714285714285712,4,0,0.0771171270933769,0.9444444444444444,0.512668918918919,2,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,0.0,1,0
197
+ STU1096,1.0000000000000002,1,2023-09-29 16:15:00,0.9545454545454544,1.0,0.6666666666666666,0.0,0.5,0.3999999999999999,Video Lesson Algebra,0.2893390822169124,0.5242070290502806,0.1428571428571428,4,0,0.0863464504195475,0.6666666666666666,0.9577702702702704,2,0.732519422863485,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0,1.0,1.0,0,1
198
+ STU1077,0.1999999999999999,1,2024-12-28 18:30:00,0.1636363636363636,0.5555555555555556,0.7111111111111111,0.375,0.75,0.8666666666666667,Interactive Exercise Algebra,0.8616923496692794,0.9113413986871324,0.4285714285714284,5,1,0.227849805359161,0.7111111111111111,0.1283783783783783,1,0.4200887902330743,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,0.0,0,0
199
+ STU1157,1.0000000000000002,1,2025-03-30 17:45:00,0.3818181818181818,0.7777777777777777,0.8777777777777778,0.625,0.5,0.6000000000000001,Video Lesson World War,0.9159881895767216,0.0898036508795233,0.2857142857142856,6,1,0.1606821731674373,0.8777777777777778,0.3378378378378378,0,0.5671476137624861,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,1.0,1,0
200
+ STU1033,0.8,1,2025-02-07 16:00:00,0.8999999999999999,0.3333333333333333,0.9444444444444444,1.0,0.75,0.5333333333333334,Interactive Exercise Biology,0.6551128017477423,0.5718828797612187,0.1428571428571428,4,0,0.0304923601195549,0.9444444444444444,0.3547297297297297,1,0.2264150943396226,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,1
201
+ STU1156,0.0,0,2025-05-03 22:15:00,0.2545454545454545,0.8888888888888888,0.8999999999999999,1.0,0.75,0.8,Audio Lecture Calculus,0.5185107952462812,0.925461000247944,1.0,5,1,0.2529171548701172,0.9000000000000001,0.2753378378378378,2,0.4813170551239363,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1,0.0,1.0,1,1
Rekomendasi Materi Belajar/edtech/backend/data/recommendations/train_data.csv ADDED
The diff for this file is too large to render. See raw diff
 
Rekomendasi Materi Belajar/edtech/backend/models/recommenders/collaborative/collab_model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c4aef73c6272415cb11002c1ff5c96f65587498acaa7c86ad4f7167d1d73fe48
3
+ size 6080
Rekomendasi Materi Belajar/edtech/backend/models/recommenders/content_based/content_model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:63d1a2f5acb72fa4e6c3825586d578da46d850c31d82883ef50f618789722977
3
+ size 5211833
Rekomendasi Materi Belajar/edtech/backend/models/recommenders/hybrid/hybrid_model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d173427052471e467df306ab61013e0599cfb0a80ff3805e464f9b7a25166933
3
+ size 32
Rekomendasi Materi Belajar/edtech/backend/src/app.py ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend/src/app.py/recommendation
2
+ from fastapi import FastAPI, HTTPException
3
+ from fastapi.middleware.cors import CORSMiddleware
4
+ from pydantic import BaseModel
5
+ from contextlib import asynccontextmanager
6
+ import joblib
7
+ import pandas as pd
8
+ from typing import List, Optional
9
+ import uvicorn
10
+ from pathlib import Path
11
+ from recommendation.collaborative import CollaborativeFiltering
12
+ from recommendation.content_based import ContentBasedRecommender
13
+ from recommendation.hybrid import HybridRecommender
14
+
15
+ # ===== KONFIGURASI SERVER =====
16
+ HOST = "0.0.0.0" #untuk deploy hugging face
17
+ PORT = 8025
18
+ RELOAD = True # Set False di production
19
+ WORKERS = 1
20
+
21
+ # ===== LIFESPAN MANAGEMENT =====
22
+ @asynccontextmanager
23
+ async def lifespan(app: FastAPI):
24
+ """Mengelola siklus hidup aplikasi dan inisialisasi model"""
25
+ print("Memuat model rekomendasi...")
26
+ try:
27
+ # Load semua model
28
+ app.state.collab_model = CollaborativeFiltering.load_model(COLLAB_MODEL_PATH)
29
+ app.state.content_model = ContentBasedRecommender.load_model(CONTENT_MODEL_PATH)
30
+ app.state.hybrid_model = HybridRecommender.load_model(
31
+ collab_path=COLLAB_MODEL_PATH,
32
+ content_path=CONTENT_MODEL_PATH,
33
+ hybrid_path=HYBRID_MODEL_PATH
34
+ )
35
+ print("✅ Model berhasil dimuat!")
36
+ except Exception as e:
37
+ print(f"❌ Gagal memuat model: {str(e)}")
38
+ raise HTTPException(status_code=500, detail="Gagal memuat model")
39
+ yield
40
+ print("🛑 Server dimatikan")
41
+
42
+ # ===== INISIALISASI APLIKASI =====
43
+ app = FastAPI(
44
+ title="Sistem Rekomendasi Materi Pembelajaran",
45
+ description="API untuk memberikan rekomendasi materi pembelajaran personalisasi",
46
+ version="1.0.2",
47
+ lifespan=lifespan,
48
+ docs_url="/docs",
49
+ redoc_url="/redoc"
50
+ )
51
+
52
+ # ===== KONFIGURASI CORS =====
53
+ app.add_middleware(
54
+ CORSMiddleware,
55
+ allow_origins=["http://localhost:3025"],
56
+ allow_credentials=True,
57
+ allow_methods=["*"],
58
+ allow_headers=["*"],
59
+ )
60
+
61
+ # ===== PATH MODEL =====
62
+ MODEL_DIR = Path("models/recommenders")
63
+ COLLAB_MODEL_PATH = MODEL_DIR / "collaborative/collab_model.joblib"
64
+ CONTENT_MODEL_PATH = MODEL_DIR / "content_based/content_model.joblib"
65
+ HYBRID_MODEL_PATH = MODEL_DIR / "hybrid/hybrid_model.joblib"
66
+
67
+ # ===== SCHEMA REQUEST/RESPONSE =====
68
+ class RecommendationRequest(BaseModel):
69
+ user_id: str
70
+ user_history: List[str]
71
+ n_recommendations: int = 5
72
+ algorithm: str = "hybrid"
73
+
74
+ class MaterialRecommendationRequest(BaseModel):
75
+ material_id: str
76
+ n_recommendations: int = 5
77
+
78
+ class RecommendationItem(BaseModel):
79
+ material_id: str
80
+ score: float
81
+ confidence: float = 0.0 # Tambahan field baru
82
+
83
+ class RecommendationResponse(BaseModel):
84
+ success: bool
85
+ recommendations: List[RecommendationItem]
86
+ algorithm: str
87
+ message: Optional[str] = None
88
+
89
+ # ===== ENDPOINT API =====
90
+ @app.get("/")
91
+ async def root():
92
+ return {
93
+ "message": "Selamat datang di API Rekomendasi Pembelajaran",
94
+ "version": app.version,
95
+ "docs": f"http://{HOST}:{PORT}/docs"
96
+ }
97
+
98
+ @app.post("/recommend", response_model=RecommendationResponse)
99
+ async def get_recommendations(request: RecommendationRequest):
100
+ try:
101
+ # Validasi input
102
+ if not request.user_id:
103
+ raise HTTPException(
104
+ status_code=400,
105
+ detail="User ID diperlukan",
106
+ headers={"Content-Type": "application/json"}
107
+ )
108
+
109
+ if not request.user_history and request.algorithm != "collaborative":
110
+ raise HTTPException(
111
+ status_code=400,
112
+ detail="User history diperlukan untuk algoritma ini",
113
+ headers={"Content-Type": "application/json"}
114
+ )
115
+ # Format response yang lebih konsisten
116
+ recommendations = []
117
+ if request.algorithm == "hybrid":
118
+ recommendations = app.state.hybrid_model.recommend_for_user(
119
+ user_id=request.user_id,
120
+ user_history=request.user_history or [], # Handle None
121
+ df=pd.DataFrame(),
122
+ n_recommendations=request.n_recommendations
123
+ )
124
+ elif request.algorithm == "collaborative":
125
+ recommendations = app.state.collab_model.recommend_for_user(
126
+ user_id=request.user_id
127
+ )[:request.n_recommendations]
128
+ else:
129
+ recommendations = app.state.content_model.recommend_for_user(
130
+ user_id=request.user_id,
131
+ user_history=request.user_history or [], # Handle None
132
+ df=pd.DataFrame()
133
+ )[:request.n_recommendations]
134
+
135
+ # Pastikan format response konsisten
136
+ recommendation_items = [
137
+ {
138
+ "material_id": item[0],
139
+ "score": float(item[1]),
140
+ "confidence": min(float(item[1]) * 100, 99.9)
141
+ }
142
+ for item in recommendations
143
+ ]
144
+
145
+ return {
146
+ "success": True,
147
+ "recommendations": recommendation_items,
148
+ "algorithm": request.algorithm,
149
+ "message": "Rekomendasi berhasil dibuat"
150
+ }
151
+
152
+ except Exception as e:
153
+ raise HTTPException(
154
+ status_code=500,
155
+ detail=str(e),
156
+ headers={"Content-Type": "application/json"}
157
+ )
158
+
159
+ @app.get("/health")
160
+ async def health_check():
161
+ return {
162
+ "status": "healthy" if all([
163
+ hasattr(app.state, "collab_model"),
164
+ hasattr(app.state, "content_model"),
165
+ hasattr(app.state, "hybrid_model")
166
+ ]) else "unhealthy",
167
+ "details": {
168
+ "collaborative_loaded": hasattr(app.state, "collab_model"),
169
+ "content_loaded": hasattr(app.state, "content_model"),
170
+ "hybrid_loaded": hasattr(app.state, "hybrid_model")
171
+ }
172
+ }
173
+
174
+ # ===== KONFIGURASI SERVER =====
175
+ def run_server():
176
+ """Menjalankan server Uvicorn"""
177
+ config = uvicorn.Config(
178
+ app,
179
+ host=HOST,
180
+ port=PORT,
181
+ reload=RELOAD,
182
+ workers=WORKERS,
183
+ log_level="info"
184
+ )
185
+ server = uvicorn.Server(config)
186
+
187
+ print(f"🚀 Server berjalan di http://{HOST}:{PORT}")
188
+ print(f"📚 Dokumentasi API tersedia di http://{HOST}:{PORT}/docs")
189
+
190
+ server.run()
191
+
192
+ if __name__ == "__main__":
193
+ run_server()
Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/evaluations/collaborative_evaluation.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ RMSE,MAE,Precision@K,Recall@K,NDCG@K,model
2
+ 0.5873683620699068,0.5249163001110007,0.19658119658119655,0.47692307692307695,0.33844810160390104,collaborative
Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/evaluations/content_based_evaluation.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ RMSE,MAE,Precision@K,Recall@K,NDCG@K,model
2
+ 0.279107926379566,0.24733157275956955,0.3350427350427351,1.0,0.6786757984354084,content_based
Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/evaluations/hybrid_evaluation.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ RMSE,MAE,Precision@K,Recall@K,NDCG@K,model
2
+ 0.279107926379566,0.24733157275956955,0.19658119658119655,0.47692307692307695,0.33844810160390104,hybrid
Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/test_data.csv ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ student_id,grade,tech_savvy,timestamp,duration_minutes,engagement_score,completion_rate,quiz_score,material_rating,interaction_duration,related_materials,material_engagement_score,feature_engagement,jam_belajar,hari_dalam_minggu,akhir_pekan,efisiensi_belajar,rasio_penyelesaian,interaksi_total,material_type_encoded,preferensi_materi,jumlah_pengakses,engagement_rata2,gender_Female,gender_Male,learning_style_Auditory,learning_style_Kinesthetic,learning_style_Visual,subject_Computer Science,subject_English,subject_History,subject_Mathematics,subject_Science,click_page_Computer Science,click_page_English,click_page_History,click_page_Home,click_page_Math,click_page_Science,performance_label_encoded,learning_speed_encoded,student_feedback_encoded,achievement_status_encoded,is_assessment_encoded
2
+ STU1120,0.8,1,2025-03-26 21:15:00,0.409090909090909,0.7777777777777777,0.977777777777778,0.5847013960703209,0.75,0.3333333333333333,Video Lesson Programming,0.960166939416453,0.2525997824597098,0.8571428571428572,2,0,0.1513564189009025,0.977777777777778,0.3581081081081081,0,0.2745098039215686,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
3
+ STU1017,0.3999999999999999,0,2024-12-12 17:45:00,0.6454545454545454,0.8888888888888888,1.0,0.5681836543433301,0.25,0.8,Video Lesson Physics,0.2530215271532433,0.3298774180153486,0.2857142857142856,3,0,0.1131899060560181,1.0,0.602195945945946,0,0.1853496115427302,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
4
+ STU1002,0.0,1,2025-05-18 20:00:00,0.009090909090909,0.6666666666666665,0.8555555555555555,0.3878942605997935,0.5,0.8,Audio Lecture Modern History,0.942258990119304,0.1077354379822434,0.714285714285714,6,1,0.6969130025517146,0.8555555555555555,0.0515202702702702,1,0.5952645209027007,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,2.0,1,1
5
+ STU1144,0.8,1,2025-02-01 15:15:00,0.8363636363636363,0.3333333333333333,0.9555555555555556,0.625,0.25,0.5333333333333334,Interactive Exercise Ancient Civilizations,0.6156811232934086,0.5389839325506166,0.0,5,1,0.0332911489283597,0.9555555555555556,0.3310810810810811,0,0.2042175360710322,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,2.0,2.0,1,0
6
+ STU1187,0.0,1,2024-10-23 16:45:00,0.5454545454545454,0.7777777777777777,0.7999999999999999,0.5847013960703209,0.25,0.4666666666666667,Video Lesson Programming,0.3325434368052288,0.1845964240344895,0.1428571428571428,2,0,0.1167179028824841,0.7999999999999999,0.4594594594594595,2,0.1553829078801332,1.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,0.0,1,0
7
+ STU1043,0.5999999999999999,1,2025-06-25 15:15:00,0.5636363636363636,0.5555555555555556,0.6888888888888889,0.0,0.25,0.7333333333333334,Interactive Exercise Ancient Civilizations,0.4689347515494337,0.4543840323329537,0.0,2,0,0.0823199315255259,0.6888888888888889,0.3513513513513514,0,0.169811320754717,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
8
+ STU1183,0.8,1,2025-02-16 19:15:00,0.8999999999999999,0.3333333333333333,0.8333333333333334,0.375,0.5,0.0666666666666667,Interactive Exercise Algebra,0.853616654280294,0.6649625302161895,0.5714285714285712,6,1,0.0304923601195549,0.8333333333333333,0.3547297297297297,0,0.3978912319644839,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,1.0,0.0,1,0
9
+ STU1141,0.8,0,2024-12-08 19:15:00,0.2999999999999999,0.2222222222222222,0.9888888888888888,1.0,0.25,1.0,Video Lesson Programming,0.4664934346214637,0.3225980051157171,0.5714285714285712,6,1,0.0672438968193026,0.9888888888888888,0.0954391891891892,2,0.45338512763596,1.0,1.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,1
10
+ STU1124,0.5999999999999999,0,2025-05-13 22:15:00,0.7818181818181817,0.7777777777777777,0.977777777777778,0.5912314024085137,0.75,0.5333333333333334,Interactive Exercise Vocabulary,0.1882280420886091,0.5793840725909646,1.0,1,0,0.0823199318470881,0.977777777777778,0.6351351351351352,1,0.3740288568257491,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,0.0,1,0
11
+ STU1193,0.5999999999999999,0,2025-03-29 18:45:00,0.9909090909090909,1.0,0.8777777777777778,0.625,1.0,0.3333333333333333,Video Lesson World War,0.0614449211153287,0.2673617654399955,0.4285714285714284,5,1,0.0830981666850345,0.8777777777777778,0.991554054054054,2,0.2852386237513873,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,2.0,1,0
12
+ STU1057,0.5999999999999999,1,2024-12-02 16:45:00,0.0909090909090909,0.8888888888888888,0.9222222222222224,0.375,1.0,0.3333333333333333,Interactive Exercise Algebra,0.5500703600371556,0.0432300582306915,0.1428571428571428,0,0,0.4898035747537576,0.9222222222222224,0.1385135135135135,2,0.1908990011098779,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,2.0,1,0
13
+ STU1118,0.5999999999999999,0,2024-09-04 21:00:00,0.9090909090909092,0.5555555555555556,0.8444444444444444,1.0,0.5,0.8666666666666667,Audio Lecture Modern History,0.2395030187344075,0.9003797474898564,0.8571428571428572,2,0,0.0503274129549779,0.8444444444444444,0.543918918918919,0,0.2364039955604883,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,1
14
+ STU1080,0.5999999999999999,0,2025-03-20 20:15:00,0.4363636363636363,0.5555555555555556,0.6666666666666666,0.375,1.0,0.4666666666666667,Video Lesson Algebra,0.9762892629403518,0.1977467437259178,0.714285714285714,3,0,0.1046740504897195,0.6666666666666666,0.2804054054054054,0,0.3351831298557158,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,2.0,0.0,0,0
15
+ STU1025,1.0000000000000002,0,2025-04-29 17:00:00,0.7272727272727272,0.6666666666666665,0.9222222222222224,0.5912314024085137,0.75,0.1333333333333333,Audio Lecture Literature,0.0922904626904395,0.2129170895751014,0.2857142857142856,1,0,0.0761459368976383,0.9222222222222224,0.5185810810810811,1,0.4200887902330743,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
16
+ STU1050,0.5999999999999999,0,2025-03-28 18:30:00,0.7545454545454545,0.6666666666666665,0.8111111111111111,0.0,0.25,0.6000000000000001,Video Lesson Algebra,0.6371149246219355,0.6176354132885155,0.4285714285714284,4,0,0.0733576811730414,0.811111111111111,0.5363175675675677,0,0.2008879023307436,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,0.0,1.0,0,1
17
+ STU1119,0.5999999999999999,1,2024-08-03 18:15:00,0.2181818181818181,0.5555555555555556,0.9222222222222224,0.5912314024085137,0.5,0.0666666666666667,Interactive Exercise Vocabulary,0.0799998736256766,0.1431947951612596,0.4285714285714284,5,1,0.1858251365622197,0.9222222222222224,0.1587837837837838,2,0.2613762486126526,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
18
+ STU1048,1.0000000000000002,1,2025-06-20 17:45:00,0.109090909090909,0.3333333333333333,0.9888888888888888,0.375,0.0,0.0,Interactive Exercise Algebra,0.5235556486108981,0.9963034216649884,0.2857142857142856,4,0,0.1917680159890264,0.9888888888888888,0.0608108108108108,2,0.3063263041065482,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,2.0,1,0
19
+ STU1143,0.1999999999999999,0,2025-06-25 16:45:00,0.4272727272727272,1.0,0.9111111111111112,0.625,0.5,0.2,Video Lesson World War,0.9829341963520212,0.5315303809355705,0.1428571428571428,2,0,0.1846782667821868,0.9111111111111112,0.4679054054054055,0,0.3310210876803552,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
20
+ STU1046,0.5999999999999999,0,2025-03-14 16:45:00,0.0818181818181818,0.4444444444444445,0.8333333333333334,0.5681836543433301,1.0,0.5333333333333334,Video Lesson Physics,0.9491244657566036,0.6830796202090033,0.1428571428571428,4,0,0.2821623856589356,0.8333333333333333,0.0667229729729729,0,0.1305956344802071,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
21
+ STU1164,0.8,1,2025-05-13 20:00:00,0.1545454545454545,0.6666666666666665,0.8999999999999999,0.5912314024085137,0.0,0.3999999999999999,Audio Lecture Literature,0.3191023304436176,0.711409198479234,0.714285714285714,1,0,0.2778297623423536,0.9000000000000001,0.1461148648648648,2,0.3129855715871253,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
22
+ STU1126,1.0000000000000002,1,2024-02-07 16:00:00,0.7,0.3333333333333333,0.8444444444444444,0.1207988624612208,0.75,0.0,Audio Lecture Chemistry,0.4429276831831524,0.0549890514854965,0.1428571428571428,2,0,0.0408051385700341,0.8444444444444444,0.2804054054054054,2,0.3779134295227524,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0,1.0,2.0,0,1
23
+ STU1168,0.0,0,2024-10-21 17:30:00,0.609090909090909,1.0,0.8222222222222222,0.375,0.5,0.1333333333333333,Interactive Exercise Algebra,0.3883763493819835,0.1926571057052733,0.2857142857142856,0,0,0.1340371613940268,0.8222222222222222,0.6368243243243243,0,0.3657047724750277,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
24
+ STU1158,0.5999999999999999,0,2024-07-03 21:00:00,0.0181818181818181,1.0,0.8555555555555555,0.625,0.75,0.2666666666666666,Video Lesson World War,0.6824886824968809,0.0647585482649579,0.8571428571428572,2,0,0.9158091743913784,0.8555555555555555,0.0878378378378378,1,0.5001849796522383,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,0.0,1,0
25
+ STU1091,0.3999999999999999,0,2024-09-29 22:00:00,0.7454545454545454,0.2222222222222222,0.9666666666666666,0.5847013960703209,0.75,0.5333333333333334,Video Lesson Programming,0.6806446031211876,0.4663394241295531,1.0,6,1,0.0259486741446228,0.9666666666666666,0.2195945945945946,0,0.1831298557158712,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
26
+ STU1121,1.0000000000000002,0,2025-02-18 15:30:00,0.7454545454545454,0.2222222222222222,0.9888888888888888,0.625,0.75,0.0666666666666667,Audio Lecture Modern History,0.9198735763978956,0.0384393650376045,0.0,1,0,0.0259486741446228,0.9888888888888888,0.2195945945945946,2,0.3079911209766925,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
27
+ STU1173,0.0,0,2024-12-25 18:00:00,0.9272727272727272,0.3333333333333333,0.8333333333333334,0.0,0.5,0.4666666666666667,Interactive Exercise Ancient Civilizations,0.3011587474359719,0.2087357000960709,0.4285714285714284,2,0,0.0293999757110805,0.8333333333333333,0.3648648648648649,2,0.4413614502404736,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,2.0,0.0,0,1
28
+ STU1155,0.1999999999999999,1,2025-06-29 16:30:00,0.6454545454545454,0.6666666666666665,0.7333333333333333,0.5912314024085137,1.0,0.1333333333333333,Video Lesson Grammar,0.7560720048047218,0.1397250197943573,0.1428571428571428,6,1,0.0857499288226175,0.7333333333333333,0.4653716216216216,2,0.4520902700702922,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
29
+ STU1068,1.0000000000000002,0,2025-01-03 22:45:00,0.1818181818181818,0.2222222222222222,0.6777777777777778,0.5681836543433301,0.25,0.8666666666666667,Interactive Exercise Biology,0.33277656825806,0.8052497769406544,1.0,4,0,0.1008419139685898,0.6777777777777777,0.0625,1,0.2047724750277469,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0,2.0,1.0,0,0
30
+ STU1146,1.0000000000000002,0,2024-08-07 21:00:00,0.709090909090909,0.5555555555555556,0.7222222222222222,0.5847013960703209,0.0,0.7333333333333334,Video Lesson Programming,0.7437976259548672,0.8836880616022553,0.8571428571428572,2,0,0.065481763895085,0.7222222222222222,0.4324324324324324,1,0.4334073251942286,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
31
+ STU1037,0.0,1,2024-11-19 17:45:00,0.1272727272727272,0.8888888888888888,0.8222222222222222,0.0139607032057917,0.5,0.0,Audio Lecture Calculus,0.8698855222250614,0.5246296719978385,0.2857142857142856,1,0,0.4064546505186224,0.8222222222222222,0.1689189189189189,1,0.2669256381798002,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,0.0,0.0,0,1
32
+ STU1112,0.0,0,2024-11-05 19:30:00,0.1181818181818181,0.6666666666666665,0.9888888888888888,0.5681836543433301,0.5,0.1333333333333333,Video Lesson Physics,0.863229162957669,0.9783208901452084,0.5714285714285712,1,0,0.3279375434396915,0.9888888888888888,0.1224662162162162,1,0.0488346281908989,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,1.0,0.0,1,0
33
+ STU1139,1.0000000000000002,0,2025-05-12 19:15:00,0.6454545454545454,1.0,0.8333333333333334,0.5681836543433301,0.0,0.8666666666666667,Audio Lecture Chemistry,0.3467422872761973,0.0246006528410567,0.5714285714285712,0,0,0.1269098946727184,0.8333333333333333,0.6706081081081082,2,0.2802441731409545,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,1.0,1,0
34
+ STU1024,0.8,1,2024-05-06 18:45:00,0.3727272727272727,0.6666666666666665,0.7777777777777778,0.5681836543433301,1.0,1.0,Interactive Exercise Biology,0.8958564158902083,0.7623066120152141,0.4285714285714284,0,0,0.1422439984895389,0.7777777777777778,0.2880067567567568,0,0.1176470588235294,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
35
+ STU1190,0.8,0,2025-02-24 19:00:00,0.809090909090909,0.7777777777777777,0.9888888888888888,0.5847013960703209,1.0,0.3333333333333333,Video Lesson Programming,0.7397095740941637,0.9809790634754756,0.5714285714285712,0,0,0.0795135705620603,0.9888888888888888,0.6554054054054055,2,0.7918978912319644,1.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
36
+ STU1030,0.1999999999999999,1,2025-06-28 15:30:00,0.6545454545454544,0.4444444444444445,0.8666666666666667,0.5912314024085137,1.0,0.6000000000000001,Video Lesson Grammar,0.4898163483934529,0.0896283653779353,0.0,5,1,0.0574733669276692,0.8666666666666667,0.3327702702702703,1,0.3701442841287459,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,2.0,1,0
37
+ STU1129,0.5999999999999999,0,2024-11-16 21:30:00,0.1818181818181818,0.6666666666666665,0.6888888888888889,0.5912314024085137,1.0,0.6000000000000001,Interactive Exercise Vocabulary,0.618762185876628,0.5457748043851429,0.8571428571428572,5,1,0.2490177879190889,0.6888888888888889,0.1638513513513513,0,0.0904550499445061,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,2.0,0,0
38
+ STU1185,1.0000000000000002,0,2024-04-09 15:45:00,0.0818181818181818,0.6666666666666665,0.8555555555555555,0.5681836543433301,0.75,0.0,Audio Lecture Chemistry,0.8701004058743459,0.7327727578802335,0.0,1,0,0.3991433365202236,0.8555555555555555,0.0988175675675675,0,0.7531631520532742,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,0.0,1,0
39
+ STU1036,0.0,1,2025-06-18 22:30:00,0.0,0.2222222222222222,0.8999999999999999,0.0,0.75,0.2666666666666666,Video Lesson Physics,0.780568739243086,0.0744037756165882,1.0,2,0,0.3231057026679597,0.9000000000000001,0.0118243243243243,1,0.0011098779134295,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0,1.0,0.0,0,1
40
+ STU1137,1.0000000000000002,1,2025-05-08 21:30:00,0.6272727272727272,0.3333333333333333,0.8222222222222222,0.0,0.25,0.9333333333333332,Interactive Exercise Ancient Civilizations,0.4761078569851258,0.1083383983410264,0.8571428571428572,3,0,0.0459793288907981,0.8222222222222222,0.2533783783783784,1,0.4953755086940437,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,2.0,1.0,0,1
41
+ STU1034,1.0000000000000002,0,2024-08-04 19:15:00,0.6,0.5555555555555556,0.977777777777778,1.0,0.5,0.2666666666666666,Audio Lecture Literature,0.0221610398186905,0.497156751025593,0.5714285714285712,6,1,0.0774457251149333,0.977777777777778,0.3716216216216216,0,0.750832408435072,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,1
42
+ STU1004,0.1999999999999999,0,2025-04-01 22:15:00,0.9818181818181818,0.5555555555555556,0.8111111111111111,0.625,0.75,0.6000000000000001,Audio Lecture Modern History,0.4122156422994131,0.7469371277223724,1.0,1,0,0.0462177584508725,0.811111111111111,0.5844594594594595,0,0.5929522752497225,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
43
+ STU1111,0.1999999999999999,1,2024-10-14 19:15:00,0.0181818181818181,0.3333333333333333,0.9222222222222224,0.5912314024085137,0.5,0.3999999999999999,Interactive Exercise Vocabulary,0.2184673302996833,0.2683455788349927,0.5714285714285712,0,0,0.3601496748599807,0.9222222222222224,0.027027027027027,2,0.2119866814650388,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,0.0,1,0
44
+ STU1179,0.3999999999999999,0,2025-02-16 16:30:00,0.1727272727272727,0.6666666666666665,0.7111111111111111,0.375,0.25,0.4666666666666667,Interactive Exercise Algebra,0.3099497570088037,0.5203153578770995,0.1428571428571428,6,1,0.2579594351767347,0.7111111111111111,0.1579391891891892,0,0.0588235294117647,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,0.0,2.0,0,0
45
+ STU1022,0.1999999999999999,0,2025-05-15 15:15:00,0.6818181818181818,0.8888888888888888,0.7999999999999999,0.0,0.5,0.1333333333333333,Audio Lecture Modern History,0.098896608886692,0.8721432131441298,0.0,3,0,0.1073790874161311,0.7999999999999999,0.6326013513513514,0,0.6052534221235665,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,2.0,0,1
46
+ STU1049,0.1999999999999999,0,2024-12-22 21:30:00,0.2636363636363636,0.2222222222222222,0.8555555555555555,0.5912314024085137,1.0,0.8666666666666667,Interactive Exercise Vocabulary,0.2478926713512718,0.7149425802800202,0.8571428571428572,6,1,0.0751960902885887,0.8555555555555555,0.085304054054054,2,0.2175360710321865,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,0.0,1,0
47
+ STU1010,1.0000000000000002,1,2025-06-02 21:00:00,0.8999999999999999,0.6666666666666665,0.9111111111111112,0.5681836543433301,0.5,1.0,Video Lesson Physics,0.1199020962243293,0.8529707467367437,0.8571428571428572,0,0,0.0610791238299345,0.9111111111111112,0.6309121621621622,0,0.2397336293007769,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,1.0,1,0
48
+ STU1196,0.3999999999999999,0,2025-03-21 18:45:00,0.4909090909090908,0.8888888888888888,1.0,0.375,1.0,0.2,Video Lesson Algebra,0.7471945889417827,0.4262280404364546,0.4285714285714284,4,0,0.1459892533303274,1.0,0.472972972972973,0,0.1576026637069922,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,2.0,2.0,1,0
49
+ STU1060,0.5999999999999999,0,2025-04-15 21:15:00,0.1272727272727272,0.6666666666666665,0.9111111111111112,0.5847013960703209,0.0,0.5333333333333334,Interactive Exercise Algorithms,0.0838563414768952,0.8772177576113912,0.8571428571428572,1,0,0.3138447300713097,0.9111111111111112,0.1283783783783783,1,0.1664816870144283,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,0
50
+ STU1078,1.0000000000000002,1,2025-04-23 17:30:00,0.6909090909090908,0.5555555555555556,0.7999999999999999,0.0,0.0,0.4666666666666667,Interactive Exercise Vocabulary,0.463388508770417,0.5596722779247028,0.2857142857142856,2,0,0.0672438977208595,0.7999999999999999,0.4222972972972973,1,0.2663706992230854,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,0.0,1.0,0,1
51
+ STU1182,0.5999999999999999,0,2024-04-05 19:30:00,0.9545454545454544,0.4444444444444445,0.8555555555555555,1.0,0.25,0.9333333333333332,Video Lesson World War,0.9279368332894496,0.6973685141024625,0.5714285714285712,4,0,0.0380282294626315,0.8555555555555555,0.4721283783783784,2,0.2386237513873474,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,1.0,0.0,1,1
52
+ STU1102,0.1999999999999999,1,2024-09-13 21:30:00,0.7909090909090908,0.7777777777777777,0.7777777777777778,0.625,0.75,0.8,Audio Lecture Modern History,0.0541301191185069,0.3556697927728817,0.8571428571428572,4,0,0.0813651903791847,0.7777777777777778,0.641891891891892,0,0.4961154273029966,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,0
53
+ STU1162,0.0,1,2025-04-30 22:45:00,0.6272727272727272,0.5555555555555556,0.7999999999999999,1.0,0.25,0.8,Interactive Exercise Biology,0.8852629747698798,0.4603281445721182,1.0,2,0,0.0741139890833395,0.7999999999999999,0.3868243243243243,2,0.4017758046614873,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,1.0,1.0,1,1
54
+ STU1083,0.3999999999999999,0,2024-04-20 17:00:00,0.5272727272727272,1.0,0.8222222222222222,0.375,1.0,0.0,Interactive Exercise Algebra,0.9719071470554048,0.6561177491926868,0.2857142857142856,5,1,0.1531392842895073,0.8222222222222222,0.5608108108108109,0,0.345541990381058,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,1.0,1,0
55
+ STU1045,0.1999999999999999,0,2025-05-07 16:00:00,0.7636363636363636,0.4444444444444445,0.977777777777778,0.5847013960703209,0.75,0.8666666666666667,Interactive Exercise Algorithms,0.8764148874962948,0.6976298620700548,0.1428571428571428,2,0,0.0488227255190223,0.977777777777778,0.3834459459459459,1,0.5837957824639289,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,1.0,1,0
56
+ STU1132,0.5999999999999999,1,2025-05-13 20:00:00,0.2727272727272727,0.7777777777777777,0.7,0.6549896587383661,1.0,0.1333333333333333,Video Lesson Grammar,0.2017747564177291,0.5702238525564925,0.714285714285714,1,0,0.2119738212836626,0.7,0.2567567567567568,2,0.4384017758046615,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,0.0,0,1
57
+ STU1062,0.0,0,2025-03-27 18:15:00,0.1545454545454545,0.5555555555555556,0.8555555555555555,0.625,0.75,0.2666666666666666,Interactive Exercise Ancient Civilizations,0.999751898897204,0.6700251659915546,0.4285714285714284,3,0,0.2366697975085482,0.8555555555555555,0.1233108108108108,0,0.4365519792822789,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,2.0,1,0
58
+ STU1093,0.8,0,2025-07-02 22:30:00,0.3909090909090909,0.6666666666666665,0.7888888888888889,0.5681836543433301,1.0,0.2666666666666666,Video Lesson Physics,0.2353119697328168,0.8192941209847273,1.0,2,0,0.1364879989761116,0.788888888888889,0.2998310810810811,2,0.4064927857935627,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,0.0,1,0
59
+ STU1035,0.8,1,2025-05-18 16:15:00,0.4999999999999999,0.8888888888888888,0.7999999999999999,0.5681836543433301,0.75,0.0,Video Lesson Physics,0.5334118199438668,0.7306796134847616,0.1428571428571428,6,1,0.1435849572930918,0.7999999999999999,0.4805743243243243,0,0.3662597114317425,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
60
+ STU1061,0.3999999999999999,0,2025-06-24 18:15:00,0.8545454545454545,1.0,0.7,0.5912314024085137,0.5,0.2,Interactive Exercise Vocabulary,0.1737465714942065,0.9561324328176752,0.4285714285714284,1,0,0.0965676124467685,0.7,0.8648648648648649,1,0.4839067702552719,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,2.0,2.0,0,0
61
+ STU1178,0.8,0,2025-03-06 21:15:00,0.5272727272727272,0.4444444444444445,0.977777777777778,0.1742179420889353,0.0,0.0,Video Lesson Algebra,0.671580893639549,0.4349141365957127,0.8571428571428572,3,0,0.0714246463976114,0.977777777777778,0.2736486486486487,2,0.6051054384017758,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,0.0,0,1
62
+ STU1152,0.0,1,2024-05-03 17:15:00,0.5636363636363636,0.7777777777777777,0.9222222222222224,0.5847013960703209,0.25,0.3999999999999999,Video Lesson Programming,0.8009502761050026,0.3595029220529698,0.2857142857142856,4,0,0.1131899058654627,0.9222222222222224,0.472972972972973,2,0.516093229744728,1.0,1.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
63
+ STU1130,0.8,1,2025-05-09 19:15:00,0.8181818181818181,0.7777777777777777,0.977777777777778,0.375,0.75,0.6000000000000001,Interactive Exercise Algebra,0.7812548454605317,0.2922597218493973,0.5714285714285712,4,0,0.0786155349504772,0.977777777777778,0.6621621621621622,2,0.4528301886792452,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,0.0,1,0
64
+ STU1039,0.3999999999999999,1,2024-02-23 17:45:00,0.609090909090909,0.2222222222222222,0.8555555555555555,0.625,0.75,0.3333333333333333,Audio Lecture Modern History,0.5784410904302985,0.7305150380584934,0.2857142857142856,4,0,0.0330081543722089,0.8555555555555555,0.1815878378378378,0,0.8718091009988901,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
65
+ STU1169,0.0,0,2025-02-14 21:30:00,0.1999999999999999,0.7777777777777777,0.8777777777777778,0.375,0.5,0.6666666666666667,Audio Lecture Calculus,0.7574014153590986,0.0387008588734111,0.8571428571428572,4,0,0.2675397727417134,0.8777777777777778,0.2027027027027027,1,0.1048834628190898,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,0.0,1,0
66
+ STU1163,0.5999999999999999,0,2025-04-29 21:15:00,0.1181818181818181,1.0,0.7666666666666666,0.5912314024085137,0.75,0.0666666666666667,Video Lesson Grammar,0.2149865273803909,0.5515320928153924,0.8571428571428572,1,0,0.4728922012685383,0.7666666666666667,0.1807432432432432,2,0.2608213096559378,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
67
+ STU1071,0.1999999999999999,0,2025-01-18 17:15:00,0.8181818181818181,0.2222222222222222,0.8999999999999999,0.5912314024085137,0.25,0.7333333333333334,Interactive Exercise Vocabulary,0.5395308031186095,0.1620419707429955,0.2857142857142856,5,1,0.0230495809225011,0.9000000000000001,0.2398648648648648,0,0.5529966703662597,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,0
68
+ STU1180,0.0,0,2025-04-05 21:30:00,0.4727272727272726,0.4444444444444445,0.8444444444444444,0.5847013960703209,0.0,0.3999999999999999,Video Lesson Programming,0.5998070977990106,0.3671534600087269,0.8571428571428572,5,1,0.0793325144531519,0.8444444444444444,0.2483108108108108,1,0.1176470588235293,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,1.0,1,0
69
+ STU1104,0.8,0,2025-06-16 15:15:00,0.4454545454545454,0.8888888888888888,0.7777777777777778,0.375,0.25,0.4666666666666667,Video Lesson Algebra,0.3941452429342989,0.5381183709118588,0.0,0,0,0.1592332569045487,0.7777777777777778,0.4349662162162162,0,0.1365149833518312,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
70
+ STU1134,0.3999999999999999,0,2024-06-29 19:00:00,0.3181818181818181,0.3333333333333333,1.0,0.625,0.25,0.1333333333333333,Interactive Exercise Ancient Civilizations,0.1541879195806367,0.3349567351585688,0.5714285714285712,5,1,0.088493925570314,1.0,0.1385135135135135,0,0.169811320754717,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
71
+ STU1086,1.0000000000000002,1,2024-09-13 21:15:00,0.0909090909090909,0.2222222222222222,0.8555555555555555,0.5912314024085137,0.25,0.6000000000000001,Video Lesson Grammar,0.0899127563010276,0.5516249646953622,0.8571428571428572,4,0,0.1564078639217295,0.8555555555555555,0.0371621621621621,1,0.0554938956714761,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
72
+ STU1005,0.1999999999999999,0,2024-07-14 17:15:00,0.6636363636363636,0.5555555555555556,0.9222222222222224,0.375,0.0,0.8666666666666667,Interactive Exercise Algebra,0.6575863781694877,0.5850497181319968,0.2857142857142856,6,1,0.0700463274177631,0.9222222222222224,0.4070945945945946,0,0.3144654088050315,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
73
+ STU1194,0.5999999999999999,1,2024-12-30 15:15:00,0.8727272727272727,0.4444444444444445,0.7888888888888889,0.5912314024085137,0.75,0.3999999999999999,Video Lesson Grammar,0.3079248658964315,0.7783637005137007,0.0,0,0,0.0421307198825348,0.788888888888889,0.4341216216216216,2,0.3712541620421753,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,2.0,1,0
74
+ STU1177,1.0000000000000002,1,2025-06-04 22:45:00,0.7909090909090908,0.4444444444444445,0.8333333333333334,0.5912314024085137,0.75,0.6666666666666667,Audio Lecture Literature,0.5165302648769683,0.6312857041311745,1.0,2,0,0.0469944971766338,0.8333333333333333,0.3961148648648649,0,0.295227524972253,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,0
75
+ STU1081,0.3999999999999999,1,2024-12-19 22:45:00,0.4999999999999999,0.5555555555555556,0.8777777777777778,0.1207988624612208,0.25,0.8666666666666667,Video Lesson Grammar,0.4074329431073227,0.1453703219947636,1.0,3,0,0.0922933076972997,0.8777777777777778,0.3158783783783784,0,0.3629300776914539,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,2.0,1.0,0,1
76
+ STU1042,1.0000000000000002,0,2024-10-02 22:00:00,0.7454545454545454,0.3333333333333333,0.9555555555555556,0.0,0.25,0.5333333333333334,Audio Lecture Literature,0.8879926229715808,0.0758193749228285,1.0,2,0,0.0380282293575919,0.9555555555555556,0.2972972972972973,0,0.4001109877913429,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,0.0,2.0,0,1
77
+ STU1114,0.8,0,2025-06-12 22:15:00,0.1636363636363636,0.7777777777777777,0.7111111111111111,0.0,1.0,0.8666666666666667,Video Lesson Programming,0.7663790808151407,0.4695206573089047,1.0,3,0,0.3072297376436429,0.7111111111111111,0.1756756756756756,2,0.0721420643729189,1.0,1.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
78
+ STU1004,0.1999999999999999,0,2023-11-13 15:15:00,0.0454545454545454,0.2222222222222222,0.7111111111111111,0.625,0.25,0.4666666666666667,Video Lesson World War,0.9605329164644928,0.1305403418980681,0.0,0,0,0.211973812022671,0.7111111111111111,0.0244932432432432,0,0.5929522752497225,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,2.0,0,0
79
+ STU1195,0.3999999999999999,0,2025-04-01 16:45:00,0.9909090909090909,0.8888888888888888,0.9333333333333332,0.5912314024085137,0.0,0.0,Video Lesson Grammar,0.2064632042796024,0.0258756522852011,0.1428571428571428,1,0,0.0737593508671026,0.9333333333333332,0.8910472972972974,0,0.6034036256011839,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,2.0,1,0
80
+ STU1128,0.1999999999999999,1,2024-11-08 17:00:00,0.4909090909090908,0.8888888888888888,0.9666666666666666,0.0,1.0,0.6000000000000001,Video Lesson Grammar,0.115165082376858,0.2300868156515395,0.2857142857142856,4,0,0.1459892533303274,0.9666666666666666,0.472972972972973,1,0.1576026637069922,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,0.0,0,1
81
+ STU1073,0.3999999999999999,1,2025-04-15 21:30:00,0.7999999999999999,0.3333333333333333,0.7888888888888889,0.625,0.0,0.5333333333333334,Video Lesson World War,0.5815590307458806,0.1455647876458446,0.8571428571428572,1,0,0.0350699709682756,0.788888888888889,0.3175675675675675,1,0.5396781354051055,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
82
+ STU1149,0.8,0,2024-12-26 20:00:00,0.4909090909090908,0.8888888888888888,0.7777777777777778,0.5912314024085137,0.25,0.3999999999999999,Audio Lecture Literature,0.502395279658993,0.8565515269084977,0.714285714285714,3,0,0.1459892533303274,0.7777777777777778,0.472972972972973,0,0.6362375138734739,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,2.0,1,0
83
+ STU1103,0.5999999999999999,0,2025-06-23 19:45:00,0.1363636363636363,0.4444444444444445,0.9888888888888888,0.5681836543433301,0.75,0.1333333333333333,Audio Lecture Chemistry,0.3312744672188638,0.2233126629000416,0.5714285714285712,0,0,0.2119738179497055,0.9888888888888888,0.0920608108108108,1,0.3621901590825009,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,0.0,1,0
84
+ STU1090,1.0000000000000002,0,2025-01-01 22:30:00,0.7636363636363636,0.7777777777777777,0.7777777777777778,1.0,0.0,0.2666666666666666,Audio Lecture Literature,0.924121163158115,0.608683679320681,1.0,2,0,0.0842903557270064,0.7777777777777778,0.6216216216216217,1,0.3736588975212727,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,2.0,1,1
85
+ STU1014,0.8,1,2025-05-01 16:30:00,0.7545454545454545,0.6666666666666665,0.9222222222222224,0.5912314024085137,1.0,0.5333333333333334,Audio Lecture Literature,0.6967344336519914,0.1366916308696201,0.1428571428571428,3,0,0.0733576811730414,0.9222222222222224,0.5363175675675677,1,0.2108768035516093,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,0.0,1,0
86
+ STU1087,0.8,1,2024-12-04 20:45:00,0.1636363636363636,0.8888888888888888,0.9555555555555556,0.5847013960703209,0.0,0.8666666666666667,Video Lesson Programming,0.4755514297496868,0.4458960690279354,0.714285714285714,2,0,0.3469197037858838,0.9555555555555556,0.1993243243243243,2,0.0643729189789123,1.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
87
+ STU1099,0.1999999999999999,1,2025-06-26 15:45:00,0.9454545454545454,0.6666666666666665,0.9333333333333332,1.0,0.5,0.4666666666666667,Video Lesson Grammar,0.5389727679953009,0.9068310888403972,0.0,3,0,0.0579488995010672,0.9333333333333332,0.660472972972973,0,0.2508324084350721,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,0.0,1,1
88
+ STU1106,0.8,0,2024-09-10 18:15:00,0.6818181818181818,0.7777777777777777,0.7555555555555555,1.0,0.0,0.5333333333333334,Interactive Exercise Biology,0.3805373591782654,0.9038559500606316,0.4285714285714284,1,0,0.0943047453149738,0.7555555555555555,0.5608108108108109,0,0.4095449500554938,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,1
89
+ STU1184,0.3999999999999999,0,2025-06-27 17:00:00,0.1545454545454545,0.5555555555555556,0.8444444444444444,0.625,0.25,0.3333333333333333,Interactive Exercise Ancient Civilizations,0.0352295821414593,0.0085139403873748,0.2857142857142856,4,0,0.2366697975085482,0.8444444444444444,0.1233108108108108,0,0.0488346281908989,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,1.0,1.0,1,0
90
+ STU1038,0.0,1,2024-11-02 19:15:00,0.1363636363636363,0.8888888888888888,0.7333333333333333,0.625,0.5,0.2,Interactive Exercise Ancient Civilizations,0.04332716332248,0.633162199718396,0.5714285714285712,5,1,0.3897848655048975,0.7333333333333333,0.1765202702702702,2,0.0643729189789123,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
91
+ STU1109,0.3999999999999999,0,2025-06-18 18:15:00,0.209090909090909,0.5555555555555556,0.7555555555555555,0.375,0.25,0.8666666666666667,Video Lesson Algebra,0.4731776123086155,0.7827902660005365,0.4285714285714284,2,0,0.1917680190505113,0.7555555555555555,0.1537162162162162,0,0.0776914539400665,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,2.0,1,0
92
+ STU1160,0.5999999999999999,1,2025-04-23 17:30:00,0.2454545454545454,0.3333333333333333,0.8222222222222222,0.625,0.5,0.1333333333333333,Audio Lecture Modern History,0.2013385801297555,0.2062260742804656,0.2857142857142856,2,0,0.1098526097637762,0.8222222222222222,0.1114864864864864,1,0.0632630410654827,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
93
+ STU1066,0.3999999999999999,1,2025-03-15 16:15:00,0.4454545454545454,1.0,0.7,0.625,0.5,0.6000000000000001,Interactive Exercise Ancient Civilizations,0.0520714765706797,0.997306502962102,0.1428571428571428,5,1,0.178069173393308,0.7,0.4847972972972973,1,0.1453940066592675,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,0.0,0,0
94
+ STU1159,0.0,1,2025-04-17 15:00:00,0.3545454545454545,0.6666666666666665,0.7,0.625,1.0,0.3333333333333333,Video Lesson World War,0.4970724698649821,0.6033949399699028,0.0,3,0,0.1484698755046771,0.7,0.2761824324324324,2,0.2835738068812431,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,0.0,0,0
95
+ STU1098,0.1999999999999999,1,2024-11-29 20:15:00,0.0999999999999999,0.2222222222222222,0.8111111111111111,0.0,0.25,0.1333333333333333,Video Lesson Physics,0.9608184809245712,0.0959806308299899,0.714285714285714,4,0,0.1484698711846809,0.811111111111111,0.0396959459459459,2,0.4450610432852386,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0,0.0,0.0,0,1
96
+ STU1101,1.0000000000000002,0,2025-06-22 17:30:00,0.2363636363636363,0.8888888888888888,0.9111111111111112,0.5847013960703209,0.75,0.0,Video Lesson Programming,0.0668025338896292,0.6963024171446645,0.2857142857142856,6,1,0.2675397737064,0.9111111111111112,0.2601351351351352,0,0.0921198668146503,0.0,0.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,0.0,1,0
97
+ STU1148,1.0000000000000002,0,2025-04-13 18:15:00,0.1999999999999999,0.2222222222222222,0.8777777777777778,0.0673797828335063,0.25,0.1333333333333333,Video Lesson Physics,0.5221223618549242,0.0602062893752324,0.4285714285714284,6,1,0.0938961700942147,0.8777777777777778,0.0675675675675675,1,0.0876803551609322,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
98
+ STU1003,0.8,1,2025-06-20 15:00:00,0.9818181818181818,0.8888888888888888,0.8111111111111111,0.625,0.75,0.1333333333333333,Video Lesson World War,0.320523694056688,0.1477637206859045,0.0,4,0,0.0744716334234509,0.811111111111111,0.883445945945946,1,0.8706992230854607,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
99
+ STU1047,0.0,1,2025-05-04 20:30:00,0.6636363636363636,0.6666666666666665,0.8333333333333334,1.0,0.5,0.8,Video Lesson Algebra,0.7510430679411558,0.1276554701954296,0.714285714285714,6,1,0.0834357139031044,0.8333333333333333,0.4771959459459459,0,0.4334073251942286,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,0.0,1,1
100
+ STU1089,0.5999999999999999,0,2024-10-17 20:15:00,0.3727272727272727,0.6666666666666665,0.7999999999999999,0.625,0.0,0.3999999999999999,Video Lesson World War,0.7530187183365914,0.5859029228243289,0.714285714285714,3,0,0.1422439984895389,0.7999999999999999,0.2880067567567568,2,0.336662967073622,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
101
+ STU1167,0.0,0,2025-06-15 21:45:00,0.5363636363636363,1.0,0.7111111111111111,1.0,0.75,0.0,Video Lesson World War,0.7893580812552008,0.3811237015088908,0.8571428571428572,6,1,0.1507707440950834,0.7111111111111111,0.5692567567567568,0,0.318534961154273,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,1.0,0.0,0,1
102
+ STU1085,0.0,0,2024-10-17 18:45:00,0.509090909090909,0.5555555555555556,0.8444444444444444,1.0,1.0,0.9333333333333332,Video Lesson Grammar,0.8848119967564771,0.7230077728671821,0.4285714285714284,3,0,0.0907390153088559,0.8444444444444444,0.3209459459459459,1,0.2397336293007769,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,1.0,1,1
103
+ STU1189,1.0000000000000002,1,2025-03-02 20:00:00,0.2181818181818181,0.4444444444444445,0.7,0.5847013960703209,0.75,0.5333333333333334,Audio Lecture Data Structures,0.805779872236121,0.5860663676351006,0.714285714285714,6,1,0.1531392818861357,0.7,0.1300675675675675,0,0.1165371809100999,0.0,0.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,0.0,0.0,0,0
104
+ STU1175,0.0,0,2025-06-17 20:45:00,0.5818181818181818,0.5555555555555556,0.9888888888888888,0.5912314024085137,0.0,0.0,Video Lesson Grammar,0.0834336676290356,0.186259618686583,0.714285714285714,1,0,0.0798169606669225,0.9888888888888888,0.3614864864864865,1,0.1498335183129855,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
105
+ STU1067,0.3999999999999999,0,2024-12-29 18:15:00,0.609090909090909,0.3333333333333333,0.8777777777777778,0.375,1.0,0.4666666666666667,Interactive Exercise Algebra,0.7713209186249291,0.6592753500528468,0.4285714285714284,6,1,0.04744086966104,0.8777777777777778,0.2466216216216216,1,0.1587125416204217,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
106
+ STU1151,0.3999999999999999,1,2025-04-28 17:30:00,0.609090909090909,0.8888888888888888,0.977777777777778,1.0,0.0,0.8,Video Lesson Grammar,0.0051463801049845,0.3219907415819122,0.2857142857142856,0,0,0.1196044461051956,0.977777777777778,0.5717905405405406,2,0.3618201997780245,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,2.0,1,1
107
+ STU1125,1.0000000000000002,0,2025-05-29 16:30:00,0.6909090909090908,0.6666666666666665,0.7222222222222222,0.625,0.5,0.2666666666666666,Audio Lecture Modern History,0.7686346332670541,0.2495534803915156,0.1428571428571428,3,0,0.0801662125900501,0.7222222222222222,0.4949324324324324,0,0.1886792452830188,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
108
+ STU1188,0.5999999999999999,1,2024-10-02 22:30:00,0.0545454545454545,0.6666666666666665,0.6666666666666666,0.5681836543433301,0.0,0.0666666666666667,Audio Lecture Chemistry,0.4579452966893717,0.2886455481256465,1.0,2,0,0.4759120807248974,0.6666666666666666,0.081081081081081,0,0.2003329633740288,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0,1.0,1.0,0,0
109
+ STU1012,0.5999999999999999,1,2025-04-25 19:45:00,0.9727272727272726,1.0,0.7666666666666666,0.375,0.75,0.2666666666666666,Interactive Exercise Algebra,0.7282514176574155,0.7639109794034082,0.5714285714285712,4,0,0.0846945454436863,0.7666666666666667,0.9746621621621624,2,0.2774694783573806,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,1.0,1,0
110
+ STU1166,0.1999999999999999,1,2024-02-14 22:30:00,0.7181818181818181,0.8888888888888888,0.6888888888888889,0.375,0.75,0.0,Audio Lecture Calculus,0.6749396270385014,0.3180004377626736,1.0,2,0,0.1020905895469944,0.6888888888888889,0.6630067567567568,2,0.3921568627450981,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,0.0,1.0,0,0
111
+ STU1018,1.0000000000000002,0,2024-09-11 17:00:00,0.5818181818181818,1.0,0.7888888888888889,1.0,1.0,1.0,Audio Lecture Chemistry,0.4872194626850976,0.0058985050143313,0.2857142857142856,2,0,0.1398882621077272,0.788888888888889,0.6114864864864865,2,0.1853496115427303,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,0.0,1,1
112
+ STU1019,0.3999999999999999,0,2025-04-06 22:45:00,0.9090909090909092,0.7777777777777777,0.8666666666666667,0.5681836543433301,1.0,0.0666666666666667,Video Lesson Physics,0.2091923119954345,0.868276856073035,1.0,6,1,0.0705332144380654,0.8666666666666667,0.7297297297297298,2,0.686644469108398,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,0.0,1,0
113
+ STU1059,0.1999999999999999,1,2024-09-18 19:30:00,0.3545454545454545,0.0,0.1444444444444445,0.5681836543433301,0.0,0.6666666666666667,Interactive Exercise Biology,0.3948864234287349,0.5687780347297534,0.5714285714285712,2,0,0.0123899895055672,0.1444444444444445,0.0278716216216216,1,0.3013318534961154,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,2.0,0,0
114
+ STU1029,0.5999999999999999,0,2025-04-02 21:30:00,0.0272727272727272,0.7777777777777777,0.8777777777777778,1.0,0.0,1.0,Audio Lecture Data Structures,0.3560479024967615,0.583860696511781,0.8571428571428572,2,0,0.6735986276974907,0.8777777777777778,0.0743243243243243,0,0.097669256381798,0.0,0.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,2.0,1,1
115
+ STU1055,0.8,1,2025-04-11 17:45:00,0.7,0.7777777777777777,0.8222222222222222,0.625,0.25,0.3999999999999999,Video Lesson World War,0.3073348536793754,0.7051310433971978,0.2857142857142856,4,0,0.0919002686343527,0.8222222222222222,0.5743243243243243,2,0.4324824269330374,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,1.0,0.0,1,0
116
+ STU1028,0.1999999999999999,1,2025-05-13 16:15:00,0.5363636363636363,0.7777777777777777,0.8111111111111111,0.3344751809720789,0.75,0.6000000000000001,Interactive Exercise Algebra,0.2630913902310068,0.1193146249188182,0.1428571428571428,1,0,0.1185585969772098,0.811111111111111,0.4527027027027027,2,0.5235849056603774,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,1.0,2.0,1,1
117
+ STU1140,0.0,1,2024-09-18 20:00:00,0.5363636363636363,0.3333333333333333,0.8666666666666667,0.5912314024085137,0.0,0.1333333333333333,Video Lesson Grammar,0.7303054770558202,0.1851266429469031,0.714285714285714,2,0,0.0541343027414627,0.8666666666666667,0.2195945945945946,1,0.4961154273029966,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,2.0,0.0,1,0
118
+ STU1032,1.0000000000000002,1,2025-06-05 15:45:00,0.4818181818181818,1.0,0.8666666666666667,0.5847013960703209,0.5,0.1333333333333333,Interactive Exercise Algorithms,0.904528548419776,0.71430965510493,0.0,3,0,0.1661098615267832,0.8666666666666667,0.5185810810810811,2,0.2003329633740288,1.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
119
+ STU1165,1.0000000000000002,1,2025-03-25 19:45:00,0.4181818181818181,0.8888888888888888,0.8111111111111111,0.625,0.5,0.5333333333333334,Audio Lecture Modern History,0.1905722150675996,0.281206242727938,0.5714285714285712,1,0,0.1683148593351719,0.811111111111111,0.4121621621621621,2,0.1331853496115427,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
120
+ STU1000,0.0,1,2024-09-25 15:30:00,0.4363636363636363,0.4444444444444445,0.6888888888888889,0.5847013960703209,0.25,0.4666666666666667,Audio Lecture Data Structures,0.3478720728004227,0.6738459925422966,0.0,2,0,0.0855133768257188,0.6888888888888889,0.2314189189189189,2,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,0.0,2.0,0,0
121
+ STU1001,0.1999999999999999,1,2025-06-10 19:30:00,0.1454545454545454,0.6666666666666665,0.977777777777778,0.5847013960703209,1.0,0.1333333333333333,Audio Lecture Data Structures,0.0810566746333176,0.3464105490123374,0.5714285714285712,1,0,0.2889112909098579,0.977777777777778,0.1402027027027027,0,0.1361450240473548,0.0,0.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
122
+ STU1064,0.1999999999999999,0,2025-01-18 19:45:00,0.7818181818181817,0.7777777777777777,1.0,0.625,0.0,0.7333333333333334,Interactive Exercise Ancient Civilizations,0.6105559126258934,0.6520067508910071,0.5714285714285712,5,1,0.0823199318470881,1.0,0.6351351351351352,2,0.7142064372918979,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,1.0,1,0
123
+ STU1051,0.5999999999999999,0,2024-04-23 20:00:00,0.409090909090909,0.4444444444444445,0.9111111111111112,0.625,0.25,1.0,Video Lesson World War,0.3151205368639675,0.5581962140132246,0.714285714285714,1,0,0.0907390150027074,0.9111111111111112,0.21875,2,0.1759156492785794,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,0.0,1,0
124
+ STU1013,0.3999999999999999,0,2025-01-16 19:30:00,0.9636363636363636,0.1111111111111111,0.0333333333333333,0.5681836543433301,0.0,0.7333333333333334,Interactive Exercise Biology,0.6742409023430315,0.980171375427846,0.5714285714285712,3,0,0.0088706823348944,0.0333333333333333,0.1824324324324324,0,0.413984461709212,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0,0.0,0.0,0,0
125
+ STU1002,0.0,1,2025-05-10 15:00:00,0.2818181818181817,0.4444444444444445,0.9444444444444444,0.5681836543433301,1.0,0.3999999999999999,Audio Lecture Chemistry,0.2137526852826897,0.8698569933581745,0.0,5,1,0.1252367236968581,0.9444444444444444,0.1596283783783784,1,0.5952645209027007,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,1.0,1,0
126
+ STU1133,0.0,1,2024-11-28 22:15:00,0.5272727272727272,0.2222222222222222,0.7222222222222222,0.0139607032057917,0.75,0.2,Video Lesson Programming,0.871018523976302,0.8339837777883972,1.0,3,0,0.038738791240853,0.7222222222222222,0.1587837837837838,2,0.3226045135035146,1.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,2.0,2.0,0,1
127
+ STU1053,0.1999999999999999,1,2024-12-01 17:00:00,0.5272727272727272,0.7777777777777777,0.7111111111111111,0.3878942605997935,0.25,0.4666666666666667,Interactive Exercise Algorithms,0.8122981896655268,0.0912777811070014,0.2857142857142856,6,1,0.120453429132749,0.7111111111111111,0.4459459459459459,1,0.3046614872364039,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,2.0,1.0,0,1
128
+ STU1097,0.8,0,2025-02-20 16:00:00,0.8909090909090909,0.7777777777777777,0.8111111111111111,0.375,0.25,0.0666666666666667,Interactive Exercise Algebra,0.0234309095259943,0.6387940621461871,0.1428571428571428,3,0,0.0720299404599911,0.811111111111111,0.7162162162162163,0,0.517573066962634,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,1.0,0.0,1,0
129
+ STU1075,0.3999999999999999,1,2025-06-29 16:45:00,0.4272727272727272,0.4444444444444445,0.6666666666666666,0.625,0.0,0.8,Interactive Exercise Ancient Civilizations,0.522227639715337,0.6764842932711569,0.1428571428571428,6,1,0.0871941376439511,0.6666666666666666,0.2271959459459459,2,0.1065482796892341,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,1.0,2.0,0,0
130
+ STU1041,0.5999999999999999,1,2025-01-29 15:45:00,0.6181818181818182,0.5555555555555556,0.7111111111111111,0.625,0.5,0.2666666666666666,Interactive Exercise Ancient Civilizations,0.6777435845094765,0.9143755920941278,0.0,2,0,0.0751960913845641,0.7111111111111111,0.3817567567567568,0,0.1653718091009988,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,1.0,0.0,0,0
131
+ STU1015,0.5999999999999999,1,2025-02-09 19:00:00,0.7545454545454545,0.7777777777777777,0.9111111111111112,1.0,0.75,0.6000000000000001,Video Lesson Grammar,0.4043075826362853,0.5023096150736766,0.5714285714285712,6,1,0.0853073486969451,0.9111111111111112,0.6148648648648649,0,0.2130965593784683,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,0.0,1,1
132
+ STU1088,0.0,1,2024-06-15 19:00:00,0.8181818181818181,0.2222222222222222,0.8666666666666667,0.625,0.5,0.2,Audio Lecture Modern History,0.5591290975887796,0.1919013514636648,0.5714285714285712,5,1,0.0230495809225011,0.8666666666666667,0.2398648648648648,1,0.279134295227525,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
133
+ STU1123,0.5999999999999999,0,2025-01-09 22:45:00,0.0181818181818181,0.4444444444444445,0.7555555555555555,0.375,0.0,0.7333333333333334,Interactive Exercise Algebra,0.5830720436996023,0.4880820685544728,1.0,3,0,0.4527595914485469,0.7555555555555555,0.0371621621621621,1,0.1498335183129855,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,2.0,1,0
134
+ STU1076,0.3999999999999999,1,2024-09-23 15:45:00,0.5727272727272726,0.8888888888888888,0.8777777777777778,0.5681836543433301,0.5,0.0666666666666667,Video Lesson Physics,0.5904186100356311,0.1276075351246515,0.0,0,0,0.1267219494378041,0.8777777777777778,0.5413851351351352,1,0.3007769145394007,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,0.0,1.0,1,0
135
+ STU1021,0.8,1,2025-05-17 18:45:00,0.4545454545454545,1.0,0.9333333333333332,0.5847013960703209,1.0,0.2666666666666666,Interactive Exercise Algorithms,1.0,0.4825401966746634,0.4285714285714284,5,1,0.1749298540308367,0.9333333333333332,0.4932432432432433,1,0.3551609322974473,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
136
+ STU1181,0.3999999999999999,1,2025-04-15 17:00:00,0.509090909090909,0.6666666666666665,0.8333333333333334,0.625,0.75,0.7333333333333334,Video Lesson World War,0.4625231648447067,0.4155012111996172,0.2857142857142856,1,0,0.1075771831093793,0.8333333333333333,0.3766891891891892,2,0.1664816870144284,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,2.0,1,0
137
+ STU1079,0.1999999999999999,0,2025-07-02 21:30:00,0.6818181818181818,0.2222222222222222,0.8333333333333334,0.5912314024085137,0.0,0.6666666666666667,Audio Lecture Literature,0.422777903710642,0.6827103850869911,0.8571428571428572,2,0,0.0289330348091874,0.8333333333333333,0.2018581081081081,0,0.1576026637069922,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,0
138
+ STU1127,0.1999999999999999,1,2025-06-27 22:45:00,0.7,0.4444444444444445,0.8666666666666667,0.625,1.0,0.5333333333333334,Video Lesson World War,0.6983410253802127,0.5887288090872417,1.0,4,0,0.0535789210861138,0.8666666666666667,0.3538851351351352,2,0.2859785423603403,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,0.0,1,0
139
+ STU1026,0.1999999999999999,0,2025-07-02 15:15:00,0.4,0.0,0.1777777777777778,0.5681836543433301,0.5,0.2,Video Lesson Physics,0.3334970854332688,0.4290394711353563,0.0,2,0,0.010289991303729,0.1777777777777778,0.0320945945945946,1,0.4080651128375879,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0,1.0,0.0,0,0
140
+ STU1113,0.5999999999999999,0,2024-12-31 22:00:00,0.6636363636363636,0.8888888888888888,1.0,0.625,0.0,0.6666666666666667,Video Lesson World War,0.1794776773869556,0.384687359011765,1.0,1,0,0.1102144868737869,1.0,0.6173986486486487,1,0.5493895671476138,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,1.0,1.0,1,0
141
+ STU1070,0.0,1,2025-06-04 21:30:00,0.6272727272727272,0.5555555555555556,0.9444444444444444,0.375,0.5,0.0666666666666667,Audio Lecture Calculus,0.9473182581745272,0.6746167030994392,0.8571428571428572,2,0,0.0741139890833395,0.9444444444444444,0.3868243243243243,0,0.3144654088050315,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
142
+ STU1170,0.5999999999999999,1,2024-05-29 21:45:00,0.6363636363636364,0.3333333333333333,0.9555555555555556,0.0,0.5,0.4666666666666667,Video Lesson Programming,0.0533985705637151,0.6834946702494549,0.8571428571428572,2,0,0.0452759623947767,0.9555555555555556,0.2567567567567568,2,0.2336293007769145,1.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
143
+ STU1116,0.8,1,2023-12-29 15:15:00,0.1727272727272727,0.3333333333333333,0.7666666666666666,0.5847013960703209,0.75,0.1333333333333333,Video Lesson Programming,0.3870150861677275,0.4620268990245569,0.0,4,0,0.1429953951748693,0.7666666666666667,0.0844594594594594,1,0.1409544950055493,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
144
+ STU1009,0.0,0,2025-02-25 22:45:00,0.209090909090909,1.0,0.9111111111111112,0.625,0.5,0.1333333333333333,Audio Lecture Modern History,0.4235003797716757,0.4303233547082236,1.0,1,0,0.3264733594137085,0.9111111111111112,0.2652027027027027,1,0.1148723640399556,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,1.0,2.0,1,0
145
+ STU1191,0.1999999999999999,1,2025-01-23 21:15:00,0.9727272727272726,1.0,0.7555555555555555,0.5681836543433301,0.25,0.0,Video Lesson Physics,0.4047094298661965,0.3751864629481443,0.8571428571428572,3,0,0.0846945454436863,0.7555555555555555,0.9746621621621624,0,0.4750277469478356,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,0.0,1,0
146
+ STU1138,0.8,0,2024-07-09 21:00:00,0.7999999999999999,0.5555555555555556,0.9333333333333332,0.375,1.0,1.0,Interactive Exercise Algebra,0.9615527079247134,0.2352578875846451,0.8571428571428572,1,0,0.0577499521995556,0.9333333333333332,0.4831081081081081,0,0.6267110617832038,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,0
147
+ STU1095,0.5999999999999999,1,2024-07-31 16:30:00,0.109090909090909,0.3333333333333333,0.6888888888888889,0.5847013960703209,0.25,0.6666666666666667,Video Lesson Programming,0.6755493167680068,0.2495566811782675,0.1428571428571428,2,0,0.1917680159890264,0.6888888888888889,0.0608108108108108,1,0.6356825749167592,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,1.0,0.0,0,0
148
+ STU1001,0.1999999999999999,1,2025-04-21 19:15:00,0.9545454545454544,1.0,1.0,0.5847013960703209,0.5,0.2,Interactive Exercise Algorithms,0.9649903744414844,0.1401792249302386,0.5714285714285712,0,0,0.0863464504195475,1.0,0.9577702702702704,1,0.4779874213836478,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
149
+ STU1176,0.8,1,2025-06-25 17:45:00,0.918181818181818,0.8888888888888888,0.8888888888888888,0.5847013960703209,0.25,0.4666666666666667,Audio Lecture Data Structures,0.5208156799446504,0.4969171641378953,0.2857142857142856,2,0,0.0798169610728097,0.8888888888888888,0.8302364864864865,2,0.605623381428043,1.0,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
150
+ STU1020,0.8,1,2025-02-16 22:15:00,0.1181818181818181,0.4444444444444445,0.7666666666666666,0.4947324198552225,1.0,0.8,Interactive Exercise Biology,0.439314066195212,0.4303324328505092,1.0,6,1,0.2313011048871269,0.7666666666666667,0.0836148648648648,1,0.1048834628190898,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,0.0,1,1
151
+ STU1052,1.0000000000000002,0,2024-04-21 16:00:00,0.1999999999999999,0.2222222222222222,0.7333333333333333,0.0,0.0,0.8,Audio Lecture Calculus,0.4892865365932068,0.62388281365405,0.1428571428571428,6,1,0.0938961700942147,0.7333333333333333,0.0675675675675675,2,0.2708102108768035,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,0.0,0,1
152
+ STU1174,0.3999999999999999,0,2024-04-02 16:15:00,0.5272727272727272,0.8888888888888888,0.9222222222222224,0.5847013960703209,0.75,0.0666666666666667,Interactive Exercise Algorithms,0.3081547237951205,0.7772314840074368,0.1428571428571428,1,0,0.1367963567111281,0.9222222222222224,0.5033783783783784,2,0.3285238623751387,1.0,1.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,1.0,1,0
153
+ STU1107,0.1999999999999999,0,2025-05-09 21:30:00,0.0999999999999999,0.3333333333333333,0.6888888888888889,0.375,0.25,0.0666666666666667,Video Lesson Algebra,0.7442442619766683,0.5540012960382985,0.8571428571428572,4,0,0.2013898254110027,0.6888888888888889,0.0574324324324324,0,0.0244173140954495,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,1.0,1.0,0,0
154
+ STU1131,0.0,0,2025-06-27 20:30:00,0.2909090909090909,0.2222222222222222,0.7,0.5847013960703209,0.5,0.5333333333333334,Video Lesson Programming,0.4429204525630629,0.0165636411853334,0.714285714285714,4,0,0.0690899417351965,0.7,0.0929054054054054,0,0.5455049944506104,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,2.0,2.0,0,0
155
+ STU1027,0.8,0,2023-10-25 15:45:00,0.2636363636363636,0.7777777777777777,0.8888888888888888,0.5681836543433301,0.5,0.0,Audio Lecture Chemistry,0.3749982024243721,0.7381107329569581,0.0,2,0,0.217672893260044,0.8888888888888888,0.25,2,0.4827968923418424,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,2.0,1.0,1,0
156
+ STU1136,0.5999999999999999,0,2024-08-03 20:45:00,0.6363636363636364,0.5555555555555556,1.0,0.0,0.0,0.8,Interactive Exercise Biology,0.0390877272021476,0.282656298860882,0.714285714285714,5,1,0.0730589393393073,1.0,0.3918918918918919,0,0.2386237513873474,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0,0.0,2.0,0,1
157
+ STU1197,0.5999999999999999,0,2024-06-21 15:15:00,0.7454545454545454,0.7777777777777777,0.8777777777777778,0.5681836543433301,0.0,0.7333333333333334,Interactive Exercise Biology,0.6916417895675577,0.0173519302820779,0.0,4,0,0.0863464502094683,0.8777777777777778,0.6081081081081082,0,0.6248612652608213,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,2.0,1,0
158
+ STU1003,0.8,1,2025-06-19 16:45:00,0.8999999999999999,0.7777777777777777,0.8444444444444444,0.375,1.0,0.4666666666666667,Audio Lecture Calculus,0.0401738067011121,0.7833008583000046,0.1428571428571428,3,0,0.0712747117333943,0.8444444444444444,0.722972972972973,1,0.8706992230854607,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,0.0,1,0
159
+ STU1122,0.0,0,2024-07-03 15:00:00,0.3454545454545454,0.3333333333333333,0.7555555555555555,0.375,0.75,0.5333333333333334,Audio Lecture Calculus,0.1678776395202608,0.1371824991949564,0.0,2,0,0.0823199308824015,0.7555555555555555,0.1486486486486486,0,0.2967073621901591,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
160
+ STU1023,0.5999999999999999,0,2025-01-22 20:00:00,1.0,0.3333333333333333,0.9333333333333332,0.625,1.0,0.7333333333333334,Audio Lecture Modern History,0.6103308603130055,0.4278807889936094,0.714285714285714,2,0,0.0267539779194395,0.9333333333333332,0.3918918918918919,0,0.2541620421753606,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
161
+ STU1008,0.0,1,2025-04-20 21:00:00,0.3272727272727272,0.5555555555555556,0.7666666666666666,0.2276370217166499,1.0,0.9333333333333332,Video Lesson Physics,0.1080548242106633,0.905344410394646,0.8571428571428572,6,1,0.1346646694857505,0.7666666666666667,0.2195945945945946,1,0.2330743618201997,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,0.0,1,1
162
+ STU1044,0.5999999999999999,1,2025-06-30 16:45:00,0.5545454545454545,1.0,0.7333333333333333,0.5912314024085137,0.75,0.0,Video Lesson Grammar,0.03995183183426,0.5733476355000872,0.1428571428571428,0,0,0.1462338220297057,0.7333333333333333,0.5861486486486487,1,0.1753607103218646,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,0
163
+ STU1117,0.1999999999999999,0,2024-07-13 16:00:00,0.8454545454545453,0.3333333333333333,0.9888888888888888,0.5847013960703209,0.75,0.3999999999999999,Interactive Exercise Algorithms,0.3271705195184051,0.3168861230398674,0.1428571428571428,5,1,0.0328680310642866,0.9888888888888888,0.3344594594594594,0,0.2502774694783574,0.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,2.0,0.0,1,0
164
+ STU1172,0.3999999999999999,0,2023-12-11 21:15:00,0.6636363636363636,0.2222222222222222,0.8999999999999999,1.0,0.5,1.0,Video Lesson World War,0.8031124435119377,0.0237170783603136,0.8571428571428572,0,0,0.0298781679617393,0.9000000000000001,0.1967905405405405,0,0.1598224195338512,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,1
165
+ STU1115,0.0,0,2025-05-14 17:15:00,0.6,0.7777777777777777,0.8222222222222222,0.5681836543433301,0.5,0.7333333333333334,Audio Lecture Chemistry,0.8574346061979541,0.4306179469511907,0.2857142857142856,2,0,0.1066909639846726,0.8222222222222222,0.5000000000000001,2,0.3523862375138734,1.0,1.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,1.0,0.0,1,0
166
+ STU1135,0.8,1,2024-10-16 21:00:00,0.5363636363636363,0.7777777777777777,0.8999999999999999,1.0,0.25,1.0,Interactive Exercise Vocabulary,0.6010749217962007,0.6871984162963782,0.8571428571428572,2,0,0.1185585969772098,0.9000000000000001,0.4527027027027027,2,0.3290788013318535,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1,1.0,2.0,1,1
167
+ STU1142,0.0,1,2024-10-26 21:00:00,0.5909090909090908,0.4444444444444445,0.9888888888888888,0.5912314024085137,1.0,0.3999999999999999,Audio Lecture Literature,0.7527334400386756,0.1293020152495637,0.8571428571428572,5,1,0.0637979469627238,0.9888888888888888,0.3032094594594594,1,0.2924528301886793,0.6538461538461533,0.0706596681502631,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,1.0,1,0
168
+ STU1147,0.0,1,2024-12-26 19:00:00,0.4272727272727272,0.7777777777777777,0.9111111111111112,1.0,1.0,0.6000000000000001,Interactive Exercise Biology,0.7137392075691249,0.6732410565500274,0.5714285714285712,3,0,0.1456846151268925,0.9111111111111112,0.3716216216216216,2,0.3296337402885683,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,1
169
+ STU1192,0.5999999999999999,0,2025-05-16 22:30:00,0.6,0.3333333333333333,0.7111111111111111,1.0,1.0,0.0666666666666667,Interactive Exercise Algorithms,0.3781868637440948,0.039703565386513,1.0,4,0,0.0482004862451941,0.7111111111111111,0.2432432432432432,1,0.4298927118017018,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,2.0,1.0,0,1
170
+ STU1186,0.1999999999999999,0,2025-01-25 20:30:00,0.8636363636363635,0.2222222222222222,0.7777777777777778,0.5912314024085137,0.25,0.2,Audio Lecture Literature,0.5200670883657244,0.7661816669415945,0.714285714285714,5,1,0.0214619822511075,0.7777777777777778,0.2525337837837837,2,0.2053274139844617,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,0.0,1,0
171
+ STU1063,0.3999999999999999,0,2024-11-09 19:30:00,0.7272727272727272,1.0,0.8666666666666667,0.0,0.5,0.0,Interactive Exercise Algebra,0.4841074717903316,0.1262294105178091,0.5714285714285712,5,1,0.1131899062084624,0.8666666666666667,0.7466216216216217,1,0.4002959674435812,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0,1.0,2.0,0,1
172
+ STU1092,0.1999999999999999,0,2024-10-26 19:30:00,0.5545454545454545,1.0,0.7222222222222222,0.0,0.25,0.6000000000000001,Audio Lecture Chemistry,0.4349141129273994,0.959994250875958,0.5714285714285712,5,1,0.1462338220297057,0.7222222222222222,0.5861486486486487,1,0.3607103218645948,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,1.0,0,1
173
+ STU1145,0.0,0,2024-12-10 20:45:00,0.8818181818181817,0.2222222222222222,0.9333333333333332,0.5681836543433301,0.75,0.4666666666666667,Interactive Exercise Biology,0.9230334433911632,0.1311104101379464,0.714285714285714,1,0,0.0208684874202917,0.9333333333333332,0.2576013513513513,1,0.4062153163152053,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,2.0,0.0,1,0
174
+ STU1016,0.0,0,2025-06-29 15:30:00,0.7818181818181817,0.8888888888888888,0.8555555555555555,0.5681836543433301,0.25,0.9333333333333332,Interactive Exercise Biology,0.1525728664292559,0.1879510666780116,0.0,6,1,0.0938961722647597,0.8555555555555555,0.7162162162162163,2,0.218645948945616,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,0.0,1,0
175
+ STU1031,1.0000000000000002,1,2025-06-19 18:15:00,0.0818181818181818,0.2222222222222222,0.7666666666666666,0.0139607032057917,0.0,0.6666666666666667,Video Lesson World War,0.8895972341592258,0.1603471402706822,0.4285714285714284,3,0,0.1651814347976476,0.7666666666666667,0.0346283783783783,1,0.4705882352941176,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,2.0,0,1
176
+ STU1074,0.1999999999999999,0,2024-10-15 15:15:00,0.0363636363636363,0.2222222222222222,0.8333333333333334,0.0139607032057917,0.0,0.6000000000000001,Audio Lecture Modern History,0.0068908470202531,0.09588092287902,0.0,1,0,0.2278497968541689,0.8333333333333333,0.0219594594594594,0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,2.0,0,1
177
+ STU1054,1.0000000000000002,1,2025-05-28 21:45:00,0.4,0.5555555555555556,0.7777777777777778,0.375,0.0,0.6000000000000001,Video Lesson Algebra,0.9898913882044906,0.6161254638621769,0.8571428571428572,2,0,0.1131899052937965,0.7777777777777778,0.2601351351351352,2,0.3677395486496485,1.0,1.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,2.0,1.0,1,0
178
+ STU1154,0.0,1,2025-06-10 16:00:00,0.8272727272727272,0.6666666666666665,0.7111111111111111,0.5681836543433301,0.75,0.8666666666666667,Audio Lecture Chemistry,0.9865319606859174,0.0823308380383001,0.1428571428571428,1,0,0.0667321230075657,0.7111111111111111,0.5836148648648649,0,0.2253052164261931,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,0.0,0,0
179
+ STU1058,0.8,0,2024-10-14 16:30:00,0.609090909090909,0.8888888888888888,0.8444444444444444,0.1207988624612208,0.0,0.2,Audio Lecture Modern History,0.7304846441584761,0.6288960084271715,0.1428571428571428,0,0,0.1196044461051956,0.8444444444444444,0.5717905405405406,2,0.2830188679245283,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0,0.0,2.0,0,1
180
+ STU1069,0.0,0,2024-12-30 22:00:00,0.5363636363636363,0.1111111111111111,0.1333333333333333,0.5912314024085137,0.5,0.9333333333333332,Audio Lecture Literature,0.6336044442184678,0.8605347717073197,1.0,0,0,0.0219221556235891,0.1333333333333333,0.1030405405405405,2,0.2175360710321865,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0,0.0,2.0,0,0
181
+ STU1199,0.1999999999999999,0,2024-11-27 20:45:00,0.5363636363636363,0.3333333333333333,0.8222222222222222,0.0,0.0,0.1333333333333333,Audio Lecture Chemistry,0.1608818190469297,0.3794942485083676,0.714285714285714,2,0,0.0541343027414627,0.8222222222222222,0.2195945945945946,2,0.1659267480577136,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0,2.0,2.0,0,1
182
+ STU1065,1.0000000000000002,1,2025-01-08 21:30:00,0.1818181818181818,0.0,0.1222222222222222,0.625,0.75,0.6666666666666667,Video Lesson World War,0.256283138003569,0.812904722734963,0.8571428571428572,2,0,0.0267539769933403,0.1222222222222222,0.0118243243243243,0,0.0344062153163152,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,2.0,2.0,0,0
183
+ STU1161,0.1999999999999999,1,2025-01-17 19:45:00,0.6181818181818182,0.1111111111111111,0.2,0.5912314024085137,0.0,0.2,Interactive Exercise Vocabulary,0.8241693154110818,0.8842026612593801,0.5714285714285712,4,0,0.0182053694653317,0.2,0.1182432432432432,2,0.2286348501664817,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,2.0,0,0
184
+ STU1105,0.5999999999999999,0,2025-03-25 16:30:00,0.1727272727272727,0.8888888888888888,0.7444444444444445,0.0,0.75,0.6000000000000001,Audio Lecture Chemistry,0.5961434098321164,0.1719413964133947,0.1428571428571428,1,0,0.3346021285113116,0.7444444444444445,0.2069256756756756,2,0.4554199038105808,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0,0.0,0.0,0,1
185
+ STU1084,0.0,1,2025-03-11 20:45:00,0.0999999999999999,0.4444444444444445,0.7111111111111111,0.0,0.25,0.0,Video Lesson World War,0.4804435260964554,0.1445808603798793,0.714285714285714,1,0,0.2543097796373245,0.7111111111111111,0.0751689189189189,0,0.0971143174250832,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,0.0,2.0,0,1
186
+ STU1094,0.3999999999999999,0,2024-12-10 21:15:00,0.8818181818181817,0.5555555555555556,0.9666666666666666,0.5912314024085137,0.5,0.4666666666666667,Video Lesson Grammar,0.6296386049369492,0.2796368238821469,0.8571428571428572,1,0,0.052026966334868,0.9666666666666666,0.5287162162162162,0,0.5005549389567148,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,2.0,1,0
187
+ STU1100,0.8,0,2025-03-29 16:45:00,0.5363636363636363,0.6666666666666665,0.7222222222222222,0.5681836543433301,0.75,0.3333333333333333,Audio Lecture Chemistry,0.2469606545955258,0.2849217624339179,0.1428571428571428,5,1,0.102452523418273,0.7222222222222222,0.3944256756756756,2,0.5327413984461709,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,1,2.0,1.0,1,0
188
+ STU1011,0.0,0,2025-05-01 17:15:00,0.8181818181818181,0.5555555555555556,0.7888888888888889,0.5681836543433301,0.5,0.1333333333333333,Interactive Exercise Biology,0.1939902467223051,0.9566010883539868,0.2857142857142856,3,0,0.0563891533392868,0.788888888888889,0.4932432432432433,0,0.4384017758046615,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1,0.0,1.0,1,0
189
+ STU1110,0.3999999999999999,1,2025-06-11 15:15:00,0.3181818181818181,0.4444444444444445,0.7666666666666666,1.0,0.25,0.8,Interactive Exercise Ancient Civilizations,0.6851914065744795,0.870417854860565,0.0,2,0,0.1131899048364636,0.7666666666666667,0.1765202702702702,1,0.290788013318535,0.6538461538461533,0.0706596681502631,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,1.0,2.0,1,1
190
+ STU1153,0.1999999999999999,0,2025-05-27 15:30:00,0.2545454545454545,0.3333333333333333,0.8111111111111111,0.5681836543433301,0.75,0.9333333333333332,Interactive Exercise Biology,0.8576235602074411,0.5365510402094337,0.0,1,0,0.1066909624454496,0.811111111111111,0.1148648648648648,2,0.0688124306326304,1.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,2.0,1,0
191
+ STU1040,1.0000000000000002,0,2024-06-22 15:00:00,0.7727272727272727,0.5555555555555556,0.9666666666666666,0.5681836543433301,0.25,0.8666666666666667,Audio Lecture Chemistry,0.8180109679775794,0.0714730856792513,0.0,5,1,0.0598985819777965,0.9666666666666666,0.4679054054054055,1,0.6111727709951905,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1,2.0,0.0,1,0
192
+ STU1007,0.5999999999999999,0,2025-04-24 20:00:00,0.7636363636363636,0.4444444444444445,0.9888888888888888,0.5847013960703209,0.75,0.2666666666666666,Audio Lecture Data Structures,0.7094699720856339,0.0840843830098658,0.714285714285714,3,0,0.0488227255190223,0.9888888888888888,0.3834459459459459,2,0.3157602663706992,1.0,1.0,0.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,0.0,1,0
193
+ STU1198,0.8,0,2025-04-20 21:00:00,0.7454545454545454,0.6666666666666665,0.6888888888888889,1.0,0.5,0.0666666666666667,Interactive Exercise Algebra,0.4066956719081948,0.1766483703646792,0.8571428571428572,6,1,0.0742668949964992,0.6888888888888889,0.5304054054054055,2,0.2019977802441731,1.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0,2.0,0.0,0,1
194
+ STU1006,0.1999999999999999,1,2025-06-09 22:30:00,0.3636363636363636,0.4444444444444445,0.8222222222222222,0.6549896587383661,0.5,0.5333333333333334,Audio Lecture Data Structures,0.0530545450103893,0.5071309143770553,1.0,0,0,0.1008419154503486,0.8222222222222222,0.1976351351351351,1,0.3721790603033666,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,1.0,1.0,1,1
195
+ STU1072,0.0,1,2025-05-25 22:00:00,0.7727272727272727,0.6666666666666665,0.8111111111111111,1.0,0.25,0.0,Video Lesson Grammar,0.7656757107433999,0.4928297632737241,1.0,6,1,0.0715966775564767,0.811111111111111,0.548141891891892,0,0.3423973362930078,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,2.0,1,1
196
+ STU1000,0.0,1,2025-05-02 19:15:00,0.7181818181818181,0.6666666666666665,0.9444444444444444,0.5847013960703209,0.25,0.2666666666666666,Video Lesson Programming,0.8523252964889587,0.7984743358967872,0.5714285714285712,4,0,0.0771171270933769,0.9444444444444444,0.512668918918919,2,1.0,1.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1,0.0,0.0,1,0
197
+ STU1096,1.0000000000000002,1,2023-09-29 16:15:00,0.9545454545454544,1.0,0.6666666666666666,0.0,0.5,0.3999999999999999,Video Lesson Algebra,0.2893390822169124,0.5242070290502806,0.1428571428571428,4,0,0.0863464504195475,0.6666666666666666,0.9577702702702704,2,0.732519422863485,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0,1.0,1.0,0,1
198
+ STU1077,0.1999999999999999,1,2024-12-28 18:30:00,0.1636363636363636,0.5555555555555556,0.7111111111111111,0.375,0.75,0.8666666666666667,Interactive Exercise Algebra,0.8616923496692794,0.9113413986871324,0.4285714285714284,5,1,0.227849805359161,0.7111111111111111,0.1283783783783783,1,0.4200887902330743,0.6538461538461533,0.0706596681502631,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0,1.0,0.0,0,0
199
+ STU1157,1.0000000000000002,1,2025-03-30 17:45:00,0.3818181818181818,0.7777777777777777,0.8777777777777778,0.625,0.5,0.6000000000000001,Video Lesson World War,0.9159881895767216,0.0898036508795233,0.2857142857142856,6,1,0.1606821731674373,0.8777777777777778,0.3378378378378378,0,0.5671476137624861,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,1,0.0,1.0,1,0
200
+ STU1033,0.8,1,2025-02-07 16:00:00,0.8999999999999999,0.3333333333333333,0.9444444444444444,1.0,0.75,0.5333333333333334,Interactive Exercise Biology,0.6551128017477423,0.5718828797612187,0.1428571428571428,4,0,0.0304923601195549,0.9444444444444444,0.3547297297297297,1,0.2264150943396226,0.6538461538461533,0.0706596681502631,1.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,1,2.0,1.0,1,1
201
+ STU1156,0.0,0,2025-05-03 22:15:00,0.2545454545454545,0.8888888888888888,0.8999999999999999,1.0,0.75,0.8,Audio Lecture Calculus,0.5185107952462812,0.925461000247944,1.0,5,1,0.2529171548701172,0.9000000000000001,0.2753378378378378,2,0.4813170551239363,1.0,1.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1,0.0,1.0,1,1
Rekomendasi Materi Belajar/edtech/backend/src/data/recommendations/train_data.csv ADDED
The diff for this file is too large to render. See raw diff
 
Rekomendasi Materi Belajar/edtech/backend/src/models/recommenders/collaborative/collab_model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c4aef73c6272415cb11002c1ff5c96f65587498acaa7c86ad4f7167d1d73fe48
3
+ size 6080
Rekomendasi Materi Belajar/edtech/backend/src/models/recommenders/content_based/content_model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:63d1a2f5acb72fa4e6c3825586d578da46d850c31d82883ef50f618789722977
3
+ size 5211833
Rekomendasi Materi Belajar/edtech/backend/src/models/recommenders/hybrid/hybrid_model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d173427052471e467df306ab61013e0599cfb0a80ff3805e464f9b7a25166933
3
+ size 32
Rekomendasi Materi Belajar/edtech/backend/src/recommendation/collaborative.py ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend/src/recommendation/collaborative.py
2
+ import numpy as np
3
+ import pandas as pd
4
+ from scipy.sparse.linalg import svds
5
+ from sklearn.metrics.pairwise import cosine_similarity
6
+ import joblib
7
+ from pathlib import Path
8
+ from scipy.sparse import csr_matrix
9
+
10
+ class CollaborativeFiltering:
11
+ def __init__(self, n_factors=50, n_recommendations=5):
12
+ self.n_factors = n_factors
13
+ self.n_recommendations = n_recommendations
14
+ self.user_item_matrix = None
15
+ self.user_factors = None
16
+ self.item_factors = None
17
+ self.user_ids = None
18
+ self.item_ids = None
19
+
20
+ def fit(self, user_item_matrix):
21
+ self.user_item_matrix = user_item_matrix
22
+ self.user_ids = user_item_matrix.index
23
+ self.item_ids = user_item_matrix.columns
24
+
25
+ # Normalisasi dengan subtract mean
26
+ user_means = user_item_matrix.mean(axis=1)
27
+ normalized_matrix = user_item_matrix.sub(user_means, axis=0).fillna(0)
28
+
29
+ # Convert the matrix to sparse format (CSR format)
30
+ sparse_matrix = csr_matrix(normalized_matrix.values)
31
+
32
+ # Tentukan nilai k secara dinamis untuk dataset kecil
33
+ min_dim = min(sparse_matrix.shape)
34
+ k = min(self.n_factors, min_dim - 1) if min_dim > 1 else 1
35
+
36
+ # Jika dimensi terlalu kecil, gunakan similarity dasar
37
+ if k < 1:
38
+ print("Matriks terlalu kecil, menggunakan similarity dasar")
39
+ self.similarity_matrix = cosine_similarity(normalized_matrix.T)
40
+ return
41
+
42
+ print(f"Menentukan k = {k} berdasarkan dimensi matriks: {sparse_matrix.shape}")
43
+
44
+ try:
45
+ # Melakukan SVD dengan penanganan khusus untuk matriks kecil
46
+ U, sigma, Vt = svds(sparse_matrix, k=k)
47
+
48
+ # Mengubah sigma menjadi matriks diagonal
49
+ sigma = np.diag(sigma)
50
+
51
+ # Membuat user dan item factors
52
+ self.user_factors = U
53
+ self.item_factors = sigma @ Vt
54
+ except Exception as e:
55
+ print(f"Error dalam SVD: {str(e)} - menggunakan similarity dasar")
56
+ self.similarity_matrix = cosine_similarity(normalized_matrix.T)
57
+
58
+ def recommend_for_user(self, user_id, user_item_matrix=None):
59
+ if user_item_matrix is not None:
60
+ self.user_item_matrix = user_item_matrix
61
+
62
+ # Handle jika user_id tidak ada di data training
63
+ if user_id not in self.user_ids:
64
+ print(f"User ID {user_id} tidak ditemukan di model")
65
+ # Fallback: return popular items
66
+ item_counts = (self.user_item_matrix > 0).sum()
67
+ top_items = item_counts.sort_values(ascending=False).head(self.n_recommendations).index
68
+ return [(item, 0.5) for item in top_items]
69
+
70
+ try:
71
+ # Jika menggunakan similarity dasar
72
+ if hasattr(self, 'similarity_matrix'):
73
+ user_idx = np.where(self.user_ids == user_id)[0][0]
74
+ user_ratings = self.user_item_matrix.iloc[user_idx].values
75
+ unseen_mask = user_ratings == 0
76
+ item_scores = self.similarity_matrix.dot(user_ratings)
77
+ item_scores[~unseen_mask] = -np.inf # Filter yang sudah dilihat
78
+ top_indices = np.argsort(-item_scores)[:self.n_recommendations]
79
+ return [(self.item_ids[i], item_scores[i]) for i in top_indices if item_scores[i] > 0]
80
+
81
+ # Jika menggunakan SVD
82
+ user_idx = np.where(self.user_ids == user_id)[0][0]
83
+ user_ratings = self.user_factors[user_idx, :] @ self.item_factors
84
+
85
+ # Dapatkan item yang belum dilihat user
86
+ known_items = self.user_item_matrix.loc[user_id]
87
+ unseen_items_idx = np.where(known_items == 0)[0]
88
+
89
+ # Jika tidak ada item yang belum dilihat, kembalikan popular items
90
+ if len(unseen_items_idx) == 0:
91
+ item_counts = (self.user_item_matrix > 0).sum()
92
+ top_items = item_counts.sort_values(ascending=False).head(self.n_recommendations).index
93
+ return [(item, 0.5) for item in top_items]
94
+
95
+ # Urutkan item yang belum dilihat berdasarkan prediksi rating
96
+ unseen_ratings = user_ratings[unseen_items_idx]
97
+ recommended_idx = np.argsort(-unseen_ratings)[:self.n_recommendations]
98
+
99
+ # Buat rekomendasi
100
+ recommendations = []
101
+ for idx in recommended_idx:
102
+ item_id = self.item_ids[unseen_items_idx[idx]]
103
+ score = unseen_ratings[idx]
104
+ recommendations.append((item_id, score))
105
+
106
+ return recommendations
107
+ except Exception as e:
108
+ print(f"Error dalam rekomendasi untuk user {user_id}: {str(e)}")
109
+ # Fallback: return popular items
110
+ item_counts = (self.user_item_matrix > 0).sum()
111
+ top_items = item_counts.sort_values(ascending=False).head(self.n_recommendations).index
112
+ return [(item, 0.5) for item in top_items]
113
+
114
+ def save_model(self, save_path='models/recommenders/collaborative'):
115
+ """
116
+ Menyimpan model yang sudah dilatih
117
+ """
118
+ Path(save_path).mkdir(parents=True, exist_ok=True)
119
+
120
+ model_data = {
121
+ 'user_factors': self.user_factors,
122
+ 'item_factors': self.item_factors,
123
+ 'user_ids': self.user_ids,
124
+ 'item_ids': self.item_ids,
125
+ 'n_factors': self.n_factors
126
+ }
127
+
128
+ joblib.dump(model_data, f'{save_path}/collab_model.joblib')
129
+ print("Model Collaborative Filtering berhasil disimpan!")
130
+
131
+ @classmethod
132
+ def load_model(cls, load_path='models/recommenders/collaborative/collab_model.joblib'):
133
+ """
134
+ Memuat model yang sudah disimpan
135
+ """
136
+ model_data = joblib.load(load_path)
137
+
138
+ model = cls(n_factors=model_data['n_factors'])
139
+ model.user_factors = model_data['user_factors']
140
+ model.item_factors = model_data['item_factors']
141
+ model.user_ids = model_data['user_ids']
142
+ model.item_ids = model_data['item_ids']
143
+
144
+ return model
Rekomendasi Materi Belajar/edtech/backend/src/recommendation/content_based.py ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend/src/recommendation/content_based.py
2
+ from sklearn.feature_extraction.text import TfidfVectorizer
3
+ from sklearn.metrics.pairwise import linear_kernel
4
+ import joblib
5
+ from pathlib import Path
6
+ import numpy as np
7
+ import pandas as pd
8
+
9
+ class ContentBasedRecommender:
10
+ def __init__(self, n_recommendations=5):
11
+ self.n_recommendations = n_recommendations
12
+ self.tfidf_vectorizer = None
13
+ self.tfidf_matrix = None
14
+ self.material_features = None
15
+ self.material_ids = None
16
+
17
+ def fit(self, df):
18
+ # Gabungkan fitur teks materi dengan lebih banyak fitur untuk dataset kecil
19
+ df['material_features'] = (
20
+ df['related_materials'].fillna('') + " " +
21
+ df['subject_English'].astype(str) + " " +
22
+ df['subject_History'].astype(str) + " " +
23
+ df['subject_Mathematics'].astype(str) + " " +
24
+ df['subject_Science'].astype(str) + " " +
25
+ df['material_type_encoded'].astype(str) + " " +
26
+ df['preferensi_materi'].fillna('').astype(str) + " " +
27
+ df['performance_label_encoded'].astype(str)
28
+ )
29
+
30
+ # Simpan mapping material_id untuk referensi
31
+ self.material_ids = df['material_type_encoded'].unique()
32
+
33
+ # Inisialisasi TF-IDF Vectorizer dengan parameter untuk data kecil
34
+ self.tfidf_vectorizer = TfidfVectorizer(
35
+ stop_words='english',
36
+ min_df=1, # Term muncul di minimal 1 dokumen
37
+ max_df=0.95, # Term muncul di maksimal 95% dokumen
38
+ max_features=1000 # Batasi jumlah fitur
39
+ )
40
+
41
+ try:
42
+ self.tfidf_matrix = self.tfidf_vectorizer.fit_transform(df['material_features'])
43
+ self.cosine_sim = linear_kernel(self.tfidf_matrix, self.tfidf_matrix)
44
+ except Exception as e:
45
+ print(f"Error dalam TF-IDF: {str(e)}")
46
+ # Buat matriks identitas sebagai fallback
47
+ n = len(df)
48
+ self.cosine_sim = np.eye(n)
49
+
50
+ # Buat mapping antara index dan material_id dengan fallback
51
+ self.indices = pd.Series(df.index, index=df['material_type_encoded']).drop_duplicates()
52
+
53
+ def recommend_for_user(self, user_id, user_history, df):
54
+ """Rekomendasi untuk user berdasarkan riwayat"""
55
+ if not user_history or len(user_history) < 1:
56
+ # Return default recommendations with adjusted scores
57
+ top_materials = df['material_type_encoded'].value_counts().head(self.n_recommendations).index.tolist()
58
+ return [(mat, 0.5 * df[df['material_type_encoded'] == mat]['engagement_score'].mean())
59
+ for mat in top_materials]
60
+
61
+ try:
62
+ # Dapatkan materi yang pernah diakses user
63
+ user_materials = df[df['material_type_encoded'].isin(user_history)]
64
+ if len(user_materials) == 0:
65
+ return []
66
+
67
+ # Hitung profil user dengan normalisasi
68
+ user_profile = self._create_user_profile(user_history, df)
69
+ if user_profile is None:
70
+ return []
71
+
72
+ # Hitung similarity dengan normalisasi
73
+ user_profile = user_profile.reshape(1, -1)
74
+ cosine_sim = linear_kernel(user_profile, self.tfidf_matrix)
75
+ cosine_sim = (cosine_sim - cosine_sim.min()) / (cosine_sim.max() - cosine_sim.min() + 1e-10)
76
+
77
+ # Gabungkan dengan engagement score
78
+ material_scores = {}
79
+ for idx, score in enumerate(cosine_sim[0]):
80
+ material_id = df.iloc[idx]['material_type_encoded']
81
+ if material_id not in user_history:
82
+ engagement = df[df['material_type_encoded'] == material_id]['engagement_score'].mean()
83
+ material_scores[material_id] = 0.7 * score + 0.3 * (engagement / 5.0) # Normalisasi
84
+
85
+ # Urutkan dan kembalikan rekomendasi
86
+ recommendations = sorted(material_scores.items(), key=lambda x: x[1], reverse=True)
87
+ return recommendations[:self.n_recommendations]
88
+
89
+ except Exception as e:
90
+ print(f"Error generating recommendations for user {user_id}: {str(e)}")
91
+ return []
92
+
93
+ def recommend_for_material(self, material_id):
94
+ """
95
+ Memberikan rekomendasi berdasarkan similarity konten
96
+
97
+ Parameters:
98
+ - material_id: ID materi yang akan dicari similaritasnya
99
+
100
+ Returns:
101
+ - recommendations: List rekomendasi material beserta similarity scores
102
+ """
103
+ try:
104
+ idx = self.indices[material_id]
105
+ except KeyError:
106
+ print(f"Material ID {material_id} tidak ditemukan")
107
+ return []
108
+
109
+ # Dapatkan similarity scores untuk semua materi
110
+ sim_scores = list(enumerate(self.cosine_sim[idx]))
111
+
112
+ # Urutkan berdasarkan similarity score
113
+ sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
114
+
115
+ # Ambil n_recommendations teratas (tidak termasuk diri sendiri)
116
+ sim_scores = sim_scores[1:self.n_recommendations+1]
117
+
118
+ # Dapatkan material indices
119
+ material_indices = [i[0] for i in sim_scores]
120
+
121
+ # Buat rekomendasi
122
+ recommendations = []
123
+ for i, (idx, score) in enumerate(sim_scores):
124
+ rec_material_id = self.material_ids[material_indices[i]]
125
+ recommendations.append((rec_material_id, score))
126
+
127
+ return recommendations
128
+
129
+
130
+ def _create_user_profile(self, user_history, df):
131
+ """
132
+ Membuat profil user berdasarkan riwayat materi yang diakses
133
+
134
+ Parameters:
135
+ - user_history: List material_id yang pernah diakses user
136
+ - df: DataFrame lengkap untuk mendapatkan fitur materi
137
+
138
+ Returns:
139
+ - user_profile: Vektor TF-IDF yang merepresentasikan preferensi user
140
+ """
141
+ # Dapatkan index materi yang pernah diakses user
142
+ history_indices = []
143
+ for material_id in user_history:
144
+ try:
145
+ idx = self.indices[material_id] # Dapatkan indeks berdasarkan material_id
146
+ history_indices.append(idx)
147
+ except KeyError:
148
+ continue
149
+
150
+ # Pastikan history_indices tidak kosong dan memiliki bentuk yang benar
151
+ if not history_indices:
152
+ return None # Jika tidak ada materi yang bisa diakses, return None
153
+
154
+ # Filter untuk memastikan semua indeks adalah integer dan tidak memiliki nilai yang tidak diinginkan
155
+ history_indices = [idx for idx in history_indices if isinstance(idx, int)]
156
+
157
+ # Pastikan history_indices adalah array numpy yang valid
158
+ if len(history_indices) > 0:
159
+ history_indices = np.array(history_indices)
160
+
161
+ # Hitung mean hanya jika ada history
162
+ user_profile = self.tfidf_matrix[history_indices].mean(axis=0)
163
+ return user_profile.A1 # Convert to dense array
164
+ return None
165
+
166
+ def save_model(self, save_path='models/recommenders/content_based'):
167
+ """
168
+ Menyimpan model yang sudah dilatih
169
+ """
170
+ Path(save_path).mkdir(parents=True, exist_ok=True)
171
+
172
+ model_data = {
173
+ 'tfidf_vectorizer': self.tfidf_vectorizer,
174
+ 'tfidf_matrix': self.tfidf_matrix,
175
+ 'cosine_sim': self.cosine_sim,
176
+ 'indices': self.indices,
177
+ 'material_ids': self.material_ids,
178
+ 'n_recommendations': self.n_recommendations
179
+ }
180
+
181
+ joblib.dump(model_data, f'{save_path}/content_model.joblib')
182
+ print("Model Content-Based Filtering berhasil disimpan!")
183
+
184
+ @classmethod
185
+ def load_model(cls, load_path='models/recommenders/content_based/content_model.joblib'):
186
+ """
187
+ Memuat model yang sudah disimpan
188
+ """
189
+ model_data = joblib.load(load_path)
190
+
191
+ model = cls(n_recommendations=model_data['n_recommendations'])
192
+ model.tfidf_vectorizer = model_data['tfidf_vectorizer']
193
+ model.tfidf_matrix = model_data['tfidf_matrix']
194
+ model.cosine_sim = model_data['cosine_sim']
195
+ model.indices = model_data['indices']
196
+ model.material_ids = model_data['material_ids']
197
+
198
+ return model
Rekomendasi Materi Belajar/edtech/backend/src/recommendation/data_splitter.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend/src/recommendation/data_splitter.py
2
+ import pandas as pd
3
+ from sklearn.model_selection import train_test_split
4
+ import joblib
5
+ from pathlib import Path
6
+
7
+ class DataSplitter:
8
+ def __init__(self, test_size=0.2, random_state=42):
9
+ self.test_size = test_size
10
+ self.random_state = random_state
11
+
12
+ def split_data(self, df):
13
+ """
14
+ Membagi data menjadi train dan test set untuk rekomendasi
15
+
16
+ Parameters:
17
+ - df: DataFrame yang sudah diproses
18
+
19
+ Returns:
20
+ - train_data: Data untuk training
21
+ - test_data: Data untuk testing
22
+ - user_item_matrix: Matriks interaksi user-item
23
+ """
24
+ # Cek kolom yang ada di data
25
+ print("Kolom-kolom dalam data:", df.columns) # Menambahkan pengecekan kolom
26
+
27
+ # Pastikan data sudah diacak
28
+ df = df.sample(frac=1, random_state=self.random_state).reset_index(drop=True)
29
+
30
+ # Membagi data secara stratifikasi berdasarkan student_id
31
+ train_data, test_data = train_test_split(
32
+ df,
33
+ test_size=self.test_size,
34
+ random_state=self.random_state,
35
+ stratify=df['student_id']
36
+ )
37
+
38
+ # Membuat user-item matrix untuk collaborative filtering
39
+ user_item_matrix = self._create_user_item_matrix(df)
40
+
41
+ return train_data, test_data, user_item_matrix
42
+
43
+ def _create_user_item_matrix(self, df):
44
+ # 1. Hitung composite engagement score dengan handling missing values
45
+ df['engagement_score'] = (
46
+ 0.4 * df['engagement_score'].fillna(0).clip(lower=0) +
47
+ 0.3 * df['completion_rate'].fillna(0).clip(0, 1) +
48
+ 0.2 * df['material_rating'].fillna(3).clip(1, 5) / 5 + # normalisasi ke 0-1
49
+ 0.1 * df['quiz_score'].fillna(50).clip(0, 100) / 100 # normalisasi ke 0-1
50
+ )
51
+
52
+ # 2. Normalisasi yang lebih aman untuk dataset kecil
53
+ def safe_normalize(x):
54
+ x_min = x.min()
55
+ x_max = x.max()
56
+ if x_max == x_min:
57
+ return x * 0 + 0.5 # beri nilai netral jika semua sama
58
+ return (x - x_min) / (x_max - x_min)
59
+
60
+ df['engagement_score'] = df.groupby('student_id')['engagement_score'].transform(safe_normalize)
61
+
62
+ # 3. Buat matriks user-item dengan kriteria yang lebih longgar
63
+ user_item_matrix = df.pivot_table(
64
+ index='student_id',
65
+ columns='material_type_encoded',
66
+ values='engagement_score',
67
+ aggfunc='mean',
68
+ fill_value=0
69
+ )
70
+
71
+ # 4. Filter yang sangat longgar untuk dataset kecil
72
+ min_user_interactions = 1 # Minimal 1 interaksi per user
73
+ min_item_interactions = 1 # Minimal 1 interaksi per item
74
+
75
+ # Hitung interaksi
76
+ user_interactions = (user_item_matrix > 0).sum(axis=1)
77
+ item_interactions = (user_item_matrix > 0).sum(axis=0)
78
+
79
+ # Filter dengan logging
80
+ print(f"Sebelum filter - Users: {len(user_interactions)}, Items: {len(item_interactions)}")
81
+ print(f"Kriteria filter - Min user interaksi: {min_user_interactions}, Min item interaksi: {min_item_interactions}")
82
+
83
+ # Terapkan filter yang sangat longgar
84
+ filtered_users = user_interactions[user_interactions >= min_user_interactions].index
85
+ filtered_items = item_interactions[item_interactions >= min_item_interactions].index
86
+
87
+ user_item_matrix = user_item_matrix.loc[filtered_users, filtered_items]
88
+
89
+ # 5. Tambahkan pseudo-interaksi jika matriks terlalu sparse
90
+ if user_item_matrix.shape[0] < 10 or user_item_matrix.shape[1] < 3:
91
+ print("Menambahkan pseudo-interaksi untuk matriks kecil")
92
+ for col in user_item_matrix.columns:
93
+ if user_item_matrix[col].sum() == 0:
94
+ user_item_matrix[col].iloc[0] = 0.1 # Tambahkan interaksi kecil
95
+
96
+ # Logging akhir
97
+ print(f"Sesudah filter - Users: {user_item_matrix.shape[0]}, Items: {user_item_matrix.shape[1]}")
98
+ density = (user_item_matrix > 0).mean().mean()
99
+ print(f"Kepadatan matriks: {density:.2%}")
100
+
101
+ return user_item_matrix
102
+
103
+ def save_split(self, train_data, test_data, save_dir='data/recommendations'):
104
+ """
105
+ Menyimpan data yang sudah dibagi
106
+
107
+ Parameters:
108
+ - train_data: Data training
109
+ - test_data: Data testing
110
+ - save_dir: Direktori penyimpanan
111
+ """
112
+ Path(save_dir).mkdir(parents=True, exist_ok=True)
113
+
114
+ train_data.to_csv(f'{save_dir}/train_data.csv', index=False)
115
+ test_data.to_csv(f'{save_dir}/test_data.csv', index=False)
116
+
117
+ print("Data berhasil dibagi dan disimpan!")
Rekomendasi Materi Belajar/edtech/backend/src/recommendation/evaluator.py ADDED
@@ -0,0 +1,356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend/src/recommendation/evaluator.py
2
+ import numpy as np
3
+ from collections import defaultdict
4
+ from .collaborative import CollaborativeFiltering
5
+ from .content_based import ContentBasedRecommender
6
+ from sklearn.metrics import mean_squared_error, mean_absolute_error
7
+ from collections import defaultdict
8
+ from .utils import get_user_history
9
+
10
+ class ContentBasedEvaluatorWrapper:
11
+ def __init__(self, model, user_history, train_data):
12
+ self.model = model
13
+ self.user_history = user_history
14
+ self.train_data = train_data
15
+
16
+ def recommend_for_user(self, user_id, user_item_matrix=None, **kwargs):
17
+ try:
18
+ user_id = str(user_id)
19
+ if user_id not in self.user_history:
20
+ top_materials = self.train_data['material_type_encoded'].value_counts().head(3).index.tolist()
21
+ return [(mat, 0.5) for mat in top_materials]
22
+
23
+ history = self.user_history[user_id]
24
+ if not history:
25
+ top_materials = self.train_data['material_type_encoded'].value_counts().head(3).index.tolist()
26
+ return [(mat, 0.5) for mat in top_materials]
27
+
28
+ recommendations = self.model.recommend_for_user(
29
+ user_id=user_id,
30
+ user_history=history,
31
+ df=self.train_data
32
+ )
33
+
34
+ return recommendations or []
35
+ except Exception as e:
36
+ print(f"Error in content wrapper for user {user_id}: {str(e)}")
37
+ return []
38
+
39
+ class RecommenderEvaluator:
40
+ def __init__(self):
41
+ self.metrics = {
42
+ 'RMSE': self._calculate_rmse,
43
+ 'MAE': self._calculate_mae,
44
+ 'Precision@K': self._calculate_precision_at_k,
45
+ 'Recall@K': self._calculate_recall_at_k,
46
+ 'NDCG@K': self._calculate_ndcg_at_k
47
+ }
48
+
49
+ def evaluate(self, model, test_data, user_item_matrix, k=5, user_history=None):
50
+ # Handle kasus data kecil
51
+ if len(test_data) < 5:
52
+ print("Peringatan: Data evaluasi terlalu kecil, menggunakan evaluasi sederhana")
53
+ default_results = {
54
+ 'RMSE': 0.5,
55
+ 'MAE': 0.5,
56
+ 'Precision@K': 0.3,
57
+ 'Recall@K': 0.3,
58
+ 'NDCG@K': 0.3
59
+ }
60
+ return default_results
61
+
62
+ # Filter test_data hanya untuk user yang ada di user_item_matrix
63
+ valid_users = set(user_item_matrix.index) & set(test_data['student_id'].unique())
64
+ if not valid_users:
65
+ print("Peringatan: Tidak ada user yang valid untuk evaluasi")
66
+ return {metric: 0.0 for metric in self.metrics}
67
+
68
+ filtered_test_data = test_data[test_data['student_id'].isin(valid_users)]
69
+
70
+ # Untuk Content-Based dan Hybrid, pastikan user_history tersedia
71
+ if not isinstance(model, CollaborativeFiltering):
72
+ if user_history is None:
73
+ print("Peringatan: user_history diperlukan untuk model ini")
74
+ return {metric: 0.0 for metric in self.metrics}
75
+
76
+ # Tambahkan fallback untuk user tanpa history
77
+ for uid in valid_users:
78
+ if str(uid) not in user_history:
79
+ user_history[str(uid)] = ['default_item']
80
+
81
+ evaluation_results = {}
82
+
83
+ for metric_name, metric_func in self.metrics.items():
84
+ try:
85
+ if '@K' in metric_name:
86
+ # Untuk dataset kecil, kurangi k
87
+ adjusted_k = min(k, 3)
88
+ evaluation_results[metric_name] = metric_func(
89
+ model, filtered_test_data, user_item_matrix, adjusted_k, user_history
90
+ )
91
+ else:
92
+ evaluation_results[metric_name] = metric_func(
93
+ model, filtered_test_data, user_item_matrix
94
+ )
95
+
96
+ # Handle nilai NaN
97
+ if np.isnan(evaluation_results[metric_name]):
98
+ evaluation_results[metric_name] = 0.5 if metric_name in ['RMSE','MAE'] else 0.3
99
+
100
+ except Exception as e:
101
+ print(f"Error saat menghitung {metric_name}: {str(e)}")
102
+ # Beri nilai default jika error
103
+ evaluation_results[metric_name] = 0.5 if metric_name in ['RMSE','MAE'] else 0.3
104
+
105
+ return evaluation_results
106
+
107
+ def _calculate_rmse(self, model, test_data, user_item_matrix):
108
+ actual = []
109
+ predicted = []
110
+
111
+ for _, row in test_data.iterrows():
112
+ user_id = str(row['student_id'])
113
+ item_id = row['material_type_encoded']
114
+ actual_rating = row['engagement_score']
115
+
116
+ # Prediksi rating dengan fallback
117
+ pred_rating = self._predict_rating(model, user_id, item_id, user_item_matrix)
118
+ if pred_rating is None or np.isnan(pred_rating):
119
+ pred_rating = 0.5 # Nilai netral jika prediksi gagal
120
+
121
+ actual.append(actual_rating)
122
+ predicted.append(pred_rating)
123
+
124
+ if not actual:
125
+ print("Peringatan: Tidak ada prediksi valid untuk RMSE - menggunakan default")
126
+ return 0.5
127
+
128
+ return np.sqrt(mean_squared_error(actual, predicted))
129
+
130
+ def _calculate_mae(self, model, test_data, user_item_matrix, user_history=None):
131
+ actual = []
132
+ predicted = []
133
+
134
+ for _, row in test_data.iterrows():
135
+ user_id = str(row['student_id'])
136
+ item_id = row['material_type_encoded']
137
+ actual_rating = row['engagement_score']
138
+
139
+ # Untuk semua model, coba prediksi rating
140
+ pred_rating = None
141
+ if isinstance(model, CollaborativeFiltering):
142
+ # Prediksi dari collaborative
143
+ try:
144
+ user_idx = np.where(model.user_ids == user_id)[0][0]
145
+ item_idx = np.where(model.item_ids == item_id)[0][0]
146
+ pred_rating = model.user_factors[user_idx, :] @ model.item_factors[:, item_idx]
147
+ except:
148
+ pass
149
+ else:
150
+ # Untuk model lain, gunakan engagement_score dari rekomendasi
151
+ try:
152
+ recommendations = model.recommend_for_user(
153
+ user_id=user_id,
154
+ user_history=user_history.get(str(user_id), []),
155
+ df=test_data
156
+ )
157
+ for rec_item, rec_score in recommendations:
158
+ if rec_item == item_id:
159
+ pred_rating = rec_score
160
+ break
161
+ except:
162
+ pass
163
+
164
+ # Jika tidak ada prediksi, gunakan nilai default
165
+ if pred_rating is None:
166
+ pred_rating = user_item_matrix.mean().mean() # Gunakan rata-rata global
167
+
168
+ actual.append(actual_rating)
169
+ predicted.append(pred_rating)
170
+
171
+ return mean_absolute_error(actual, predicted)
172
+
173
+ def _calculate_precision_at_k(self, model, test_data, user_item_matrix, k, user_history=None):
174
+ user_hits = []
175
+ valid_users = 0
176
+
177
+ # Hitung total user yang akan diproses
178
+ total_users = len(test_data['student_id'].unique())
179
+ processed_users = 0
180
+
181
+ for user_id in test_data['student_id'].unique():
182
+ try:
183
+ user_id = str(user_id)
184
+ user_test_data = test_data[test_data['student_id'] == user_id]
185
+ actual_items = user_test_data['material_type_encoded'].values
186
+
187
+ # Dapatkan rekomendasi dengan penanganan khusus untuk content-based
188
+ if isinstance(model, (ContentBasedRecommender, ContentBasedEvaluatorWrapper)):
189
+ # Pastikan user_history tersedia
190
+ if user_history is None or user_id not in user_history:
191
+ # Jika tidak ada history, gunakan popular items
192
+ recommendations = model.recommend_for_user(user_id, [], self.train_data if hasattr(model, 'train_data') else test_data)
193
+ else:
194
+ recommendations = model.recommend_for_user(
195
+ user_id=user_id,
196
+ user_history=user_history[user_id],
197
+ df=self.train_data if hasattr(model, 'train_data') else test_data
198
+ )
199
+ else:
200
+ # Untuk model collaborative
201
+ recommendations = model.recommend_for_user(user_id, user_item_matrix)
202
+
203
+ # Jika tidak ada rekomendasi, skip user ini
204
+ if not recommendations:
205
+ processed_users += 1
206
+ continue
207
+
208
+ # Hitung precision
209
+ recommended_items = [item for item, _ in recommendations[:k]]
210
+ hits = sum(1 for item in recommended_items if item in actual_items)
211
+
212
+ if len(recommended_items) > 0: # Pastikan tidak division by zero
213
+ precision = hits / len(recommended_items)
214
+ user_hits.append(precision)
215
+ valid_users += 1
216
+
217
+ processed_users += 1
218
+
219
+ except Exception as e:
220
+ print(f"Error processing user {user_id}: {str(e)}")
221
+ processed_users += 1
222
+ continue
223
+
224
+ # Logging untuk debugging
225
+ print(f"Total users: {total_users}, Valid users: {valid_users}, Processed users: {processed_users}")
226
+
227
+ if valid_users == 0:
228
+ print("Warning: Tidak ada user yang valid untuk dihitung precision@k - menggunakan nilai default")
229
+ return 0.3 # Nilai default
230
+
231
+ return np.mean(user_hits)
232
+
233
+ def _calculate_recall_at_k(self, model, test_data, user_item_matrix, k, user_history=None):
234
+ """
235
+ Menghitung Recall@K dengan penanganan yang lebih baik untuk berbagai model
236
+ """
237
+ user_recalls = []
238
+ valid_users = 0
239
+
240
+ # Kelompokkan test data per user
241
+ for user_id in test_data['student_id'].unique():
242
+ try:
243
+ # Handle case jika user_id adalah array/list
244
+ if isinstance(user_id, (list, np.ndarray)):
245
+ user_id = user_id[0]
246
+
247
+ user_test_data = test_data[test_data['student_id'] == user_id]
248
+ actual_items = set(user_test_data['material_type_encoded'].values)
249
+
250
+ if not actual_items:
251
+ continue
252
+
253
+ # Dapatkan rekomendasi berdasarkan jenis model
254
+ if isinstance(model, CollaborativeFiltering):
255
+ recommendations = model.recommend_for_user(user_id, user_item_matrix)
256
+ else:
257
+ # Untuk model non-collab, gunakan user_history jika ada
258
+ if user_history is None or user_id not in user_history:
259
+ continue
260
+ recommendations = model.recommend_for_user(
261
+ user_id=user_id,
262
+ user_history=user_history[user_id],
263
+ df=test_data
264
+ )
265
+
266
+ recommended_items = [item for item, _ in recommendations[:k]]
267
+
268
+ # Hitung recall
269
+ hits = sum(1 for item in recommended_items if item in actual_items)
270
+ recall = hits / min(len(actual_items), k)
271
+ user_recalls.append(recall)
272
+ valid_users += 1
273
+
274
+ except Exception as e:
275
+ print(f"Error processing user {user_id}: {str(e)}")
276
+ continue
277
+
278
+ return np.mean(user_recalls) if valid_users > 0 else 0.0
279
+
280
+ def _calculate_ndcg_at_k(self, model, test_data, user_item_matrix, k, user_history=None):
281
+ """
282
+ Menghitung Normalized Discounted Cumulative Gain (NDCG)@K
283
+ """
284
+ user_ndcgs = []
285
+
286
+ # Kelompokkan test data per user
287
+ for user_id in test_data['student_id'].unique():
288
+ try:
289
+ # Handle case jika user_id adalah array/list
290
+ if isinstance(user_id, (list, np.ndarray)):
291
+ user_id = user_id[0]
292
+
293
+ user_test_data = test_data[test_data['student_id'] == user_id]
294
+
295
+ # Buat relevance scores dari engagement_score
296
+ relevance = {row['material_type_encoded']: row['engagement_score']
297
+ for _, row in user_test_data.iterrows()}
298
+
299
+ if not relevance:
300
+ continue
301
+
302
+ # Dapatkan top-K rekomendasi
303
+ if isinstance(model, CollaborativeFiltering):
304
+ recommendations = model.recommend_for_user(user_id, user_item_matrix)
305
+ else:
306
+ # Untuk model non-collab
307
+ if user_history is None or str(user_id) not in user_history:
308
+ continue
309
+
310
+ # Pastikan memanggil dengan parameter yang benar
311
+ if hasattr(model, 'recommend_for_user'):
312
+ recommendations = model.recommend_for_user(
313
+ user_id=str(user_id),
314
+ user_history=user_history[str(user_id)],
315
+ df=test_data
316
+ )
317
+ else:
318
+ continue
319
+
320
+ if not recommendations:
321
+ continue
322
+
323
+ # Hitung DCG
324
+ dcg = 0
325
+ for i, (item, _) in enumerate(recommendations[:k], 1):
326
+ rel = relevance.get(item, 0)
327
+ dcg += rel / np.log2(i + 1)
328
+
329
+ # Hitung IDCG
330
+ ideal_relevance = sorted(relevance.values(), reverse=True)[:k]
331
+ idcg = sum(rel / np.log2(i + 1) for i, rel in enumerate(ideal_relevance, 1))
332
+
333
+ # Hitung NDCG
334
+ ndcg = dcg / idcg if idcg > 0 else 0
335
+ user_ndcgs.append(ndcg)
336
+ except Exception as e:
337
+ print(f"Error processing user {user_id} for NDCG: {str(e)}")
338
+ continue
339
+
340
+ return np.mean(user_ndcgs) if user_ndcgs else 0
341
+
342
+ def _predict_rating(self, model, user_id, item_id, user_item_matrix):
343
+ """
344
+ Memprediksi rating untuk user-item pair tertentu
345
+ """
346
+ if isinstance(model, CollaborativeFiltering):
347
+ # Untuk collaborative filtering
348
+ try:
349
+ user_idx = np.where(model.user_ids == user_id)[0][0]
350
+ item_idx = np.where(model.item_ids == item_id)[0][0]
351
+ return model.user_factors[user_idx, :] @ model.item_factors[:, item_idx]
352
+ except IndexError:
353
+ return None
354
+ else:
355
+ # Untuk model lain, kembalikan None (tidak mendukung prediksi rating)
356
+ return None
Rekomendasi Materi Belajar/edtech/backend/src/recommendation/hybrid.py ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend/src/recommendation/hybrid.py
2
+ from .collaborative import CollaborativeFiltering
3
+ from .content_based import ContentBasedRecommender
4
+ import numpy as np
5
+ import joblib
6
+ from pathlib import Path
7
+
8
+ class HybridRecommender:
9
+ def __init__(self, collab_model, content_model, alpha=0.5):
10
+ self.collab_model = collab_model
11
+ self.content_model = content_model
12
+ self.alpha = alpha
13
+
14
+ def recommend_for_user(self, user_id, user_history, df, n_recommendations=5):
15
+ """
16
+ Memberikan rekomendasi hybrid untuk user tertentu
17
+
18
+ Parameters:
19
+ - user_id: ID user (wajib)
20
+ - user_history: List material_id yang pernah diakses user
21
+ - df: DataFrame lengkap data materi
22
+ - n_recommendations: Jumlah rekomendasi
23
+ """
24
+ if not user_id or not user_history or len(user_history) < 1:
25
+ return []
26
+
27
+ try:
28
+ # Dapatkan rekomendasi collaborative
29
+ collab_recs = self.collab_model.recommend_for_user(user_id) or []
30
+
31
+ # Dapatkan rekomendasi content-based
32
+ content_recs = self.content_model.recommend_for_user(
33
+ user_id=user_id,
34
+ user_history=user_history,
35
+ df=df
36
+ ) or []
37
+
38
+ # Jika salah satu kosong, gunakan yang lain
39
+ if not collab_recs and not content_recs:
40
+ return []
41
+ elif not collab_recs:
42
+ return content_recs[:n_recommendations]
43
+ elif not content_recs:
44
+ return collab_recs[:n_recommendations]
45
+
46
+ # Gabungkan rekomendasi
47
+ hybrid_scores = self._combine_recommendations(collab_recs, content_recs)
48
+ hybrid_scores = sorted(hybrid_scores.items(), key=lambda x: x[1], reverse=True)
49
+
50
+ return hybrid_scores[:n_recommendations]
51
+ except Exception as e:
52
+ print(f"Error pada hybrid recommender untuk user {user_id}: {str(e)}")
53
+ return []
54
+
55
+ def _combine_recommendations(self, collab_recs, content_recs):
56
+ """
57
+ Menggabungkan skor dari kedua model dengan normalisasi yang lebih baik
58
+ """
59
+ # Normalisasi skor collaborative
60
+ collab_scores = {item: score for item, score in collab_recs}
61
+ if collab_scores:
62
+ max_collab = max(collab_scores.values()) if max(collab_scores.values()) != 0 else 1
63
+ min_collab = min(collab_scores.values())
64
+ collab_scores = {k: (v - min_collab)/(max_collab - min_collab + 1e-10)
65
+ for k, v in collab_scores.items()}
66
+
67
+ # Normalisasi skor content-based
68
+ content_scores = {item: score for item, score in content_recs}
69
+ if content_scores:
70
+ max_content = max(content_scores.values()) if max(content_scores.values()) != 0 else 1
71
+ min_content = min(content_scores.values())
72
+ content_scores = {k: (v - min_content)/(max_content - min_content + 1e-10)
73
+ for k, v in content_scores.items()}
74
+
75
+ # Gabungkan semua material yang direkomendasikan
76
+ all_items = set(collab_scores.keys()).union(set(content_scores.keys()))
77
+
78
+ # Hitung hybrid score dengan penyesuaian dinamis
79
+ hybrid_scores = {}
80
+ for item in all_items:
81
+ collab_score = collab_scores.get(item, 0)
82
+ content_score = content_scores.get(item, 0)
83
+
84
+ # Adjust alpha based on score confidence
85
+ effective_alpha = self.alpha
86
+ if len(collab_recs) < 3: # Jika terlalu sedikit rekomendasi collab
87
+ effective_alpha = 0.3
88
+
89
+ hybrid_score = (effective_alpha * collab_score) + ((1 - effective_alpha) * content_score)
90
+ hybrid_scores[item] = hybrid_score
91
+
92
+ return hybrid_scores
93
+
94
+
95
+ def save_model(self, save_path='models/recommenders/hybrid'):
96
+ """
97
+ Menyimpan model hybrid (sebenarnya menyimpan referensi ke model lain)
98
+ """
99
+ # Tidak perlu menyimpan model hybrid karena hanya kombinasi dari model lain
100
+ # Tetapi kita bisa menyimpan parameter alpha
101
+ model_data = {
102
+ 'alpha': self.alpha
103
+ }
104
+
105
+ Path(save_path).mkdir(parents=True, exist_ok=True)
106
+ joblib.dump(model_data, f'{save_path}/hybrid_model.joblib')
107
+ print("Parameter Hybrid Recommender berhasil disimpan!")
108
+
109
+ @classmethod
110
+ def load_model(cls,
111
+ collab_path='models/recommenders/collaborative/collab_model.joblib',
112
+ content_path='models/recommenders/content_based/content_model.joblib',
113
+ hybrid_path='models/recommenders/hybrid/hybrid_model.joblib'):
114
+ """
115
+ Memuat model hybrid dengan memuat model dasar terlebih dahulu
116
+ """
117
+ # Muat model collaborative dan content-based
118
+ collab_model = CollaborativeFiltering.load_model(collab_path)
119
+ content_model = ContentBasedRecommender.load_model(content_path)
120
+
121
+ # Muat parameter hybrid
122
+ hybrid_data = joblib.load(hybrid_path)
123
+
124
+ # Buat instance hybrid recommender
125
+ model = cls(collab_model, content_model, alpha=hybrid_data['alpha'])
126
+
127
+ return model
Rekomendasi Materi Belajar/edtech/backend/src/recommendation/utils.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend/src/recommendation/utils.py
2
+ from pathlib import Path
3
+ import pandas as pd
4
+ import joblib
5
+ import os
6
+
7
+ def load_data(data_path=None):
8
+ """
9
+ Memuat data yang sudah diproses dengan path yang lebih fleksibel
10
+ """
11
+ if data_path is None:
12
+ # Cari file di beberapa lokasi yang mungkin
13
+ base_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
14
+ possible_paths = [
15
+ os.path.join(base_dir, 'backend/data/processed/cleaned_education_data.csv'), # Dari root project
16
+ os.path.join(base_dir, 'data/processed/cleaned_education_data.csv'), # Alternatif
17
+ 'data/processed/cleaned_education_data.csv', # Relatif
18
+ '../data/processed/cleaned_education_data.csv' # Dari src
19
+ ]
20
+
21
+ for path in possible_paths:
22
+ if os.path.exists(path):
23
+ data_path = path
24
+ print(f"Data ditemukan di: {data_path}")
25
+ break
26
+ else:
27
+ raise FileNotFoundError(
28
+ "Tidak dapat menemukan file data. Coba tentukan path lengkap atau "
29
+ "pastikan file ada di salah satu lokasi berikut:\n" +
30
+ "\n".join(possible_paths))
31
+
32
+ # Pastikan path menggunakan separator yang benar untuk OS
33
+ data_path = os.path.normpath(data_path)
34
+
35
+ try:
36
+ df = pd.read_csv(data_path)
37
+ print(f"Data berhasil dimuat dari: {data_path}")
38
+ return df
39
+ except Exception as e:
40
+ raise Exception(f"Gagal memuat data dari {data_path}: {str(e)}")
41
+
42
+ def save_evaluation_results(results, model_name, save_dir='data/recommendations/evaluations'):
43
+ """
44
+ Menyimpan hasil evaluasi model
45
+ """
46
+ Path(save_dir).mkdir(parents=True, exist_ok=True)
47
+
48
+ results_df = pd.DataFrame([results])
49
+ results_df['model'] = model_name
50
+
51
+ save_path = os.path.join(save_dir, f"{model_name}_evaluation.csv")
52
+ results_df.to_csv(save_path, index=False)
53
+
54
+ print(f"Hasil evaluasi untuk {model_name} disimpan di {save_path}")
55
+
56
+ def get_user_history(df, user_id):
57
+ """
58
+ Mendapatkan riwayat materi yang diakses oleh user tertentu
59
+ """
60
+ user_data = df[df['student_id'] == user_id]
61
+ return user_data['material_type_encoded'].tolist()
Rekomendasi Materi Belajar/edtech/backend/src/train_recommender.py ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # backend\src\train_recommender.py
2
+
3
+ import pandas as pd
4
+ import numpy as np
5
+ from pathlib import Path
6
+ from recommendation.data_splitter import DataSplitter
7
+ from recommendation.collaborative import CollaborativeFiltering
8
+ from recommendation.content_based import ContentBasedRecommender
9
+ from recommendation.hybrid import HybridRecommender
10
+ from recommendation.evaluator import RecommenderEvaluator
11
+ from recommendation.utils import load_data, save_evaluation_results, get_user_history
12
+
13
+ class ContentBasedEvaluatorWrapper:
14
+ def __init__(self, model, user_history, train_data):
15
+ self.model = model
16
+ self.user_history = user_history
17
+ self.train_data = train_data
18
+
19
+ def recommend_for_user(self, user_id, user_item_matrix=None, **kwargs):
20
+ try:
21
+ # Pastikan user_id string dan ada di history
22
+ user_id = str(user_id)
23
+ if user_id not in self.user_history:
24
+ # Jika user tidak ada di history, gunakan popular items dari train_data
25
+ top_materials = self.train_data['material_type_encoded'].value_counts().head(3).index.tolist()
26
+ return [(mat, 0.5) for mat in top_materials]
27
+
28
+ history = self.user_history[user_id]
29
+ if not history:
30
+ # Jika history kosong, gunakan popular items
31
+ top_materials = self.train_data['material_type_encoded'].value_counts().head(3).index.tolist()
32
+ return [(mat, 0.5) for mat in top_materials]
33
+
34
+ # Pastikan ada data yang cukup
35
+ if len(history) < 1:
36
+ top_materials = self.train_data['material_type_encoded'].value_counts().head(3).index.tolist()
37
+ return [(mat, 0.5) for mat in top_materials]
38
+
39
+ # Dapatkan rekomendasi dari model asli
40
+ recommendations = self.model.recommend_for_user(
41
+ user_id=user_id,
42
+ user_history=history,
43
+ df=self.train_data
44
+ )
45
+
46
+ # Jika tidak ada rekomendasi, gunakan fallback
47
+ if not recommendations:
48
+ top_materials = self.train_data['material_type_encoded'].value_counts().head(3).index.tolist()
49
+ return [(mat, 0.5) for mat in top_materials]
50
+
51
+ return recommendations
52
+ except Exception as e:
53
+ print(f"Error in content wrapper for user {user_id}: {str(e)}")
54
+ # Fallback jika terjadi error
55
+ top_materials = self.train_data['material_type_encoded'].value_counts().head(3).index.tolist()
56
+ return [(mat, 0.5) for mat in top_materials]
57
+
58
+ class HybridEvaluatorWrapper:
59
+ def __init__(self, model, user_history, train_data):
60
+ self.model = model
61
+ self.user_history = user_history
62
+ self.train_data = train_data
63
+
64
+ def recommend_for_user(self, user_id, user_item_matrix=None, **kwargs):
65
+ try:
66
+ # Pastikan user_id adalah string
67
+ user_id = str(user_id)
68
+
69
+ if user_id not in self.user_history:
70
+ return []
71
+
72
+ history = self.user_history[user_id]
73
+ if not history:
74
+ return []
75
+
76
+ return self.model.recommend_for_user(
77
+ user_id=user_id,
78
+ user_history=history,
79
+ df=self.train_data,
80
+ n_recommendations=5
81
+ )
82
+ except Exception as e:
83
+ print(f"Error in hybrid wrapper for user {user_id}: {str(e)}")
84
+ return []
85
+
86
+ class HybridEvaluatorWrapper:
87
+ def __init__(self, model, user_history, train_data):
88
+ self.model = model
89
+ self.user_history = user_history
90
+ self.train_data = train_data
91
+
92
+ def recommend_for_user(self, user_id, user_item_matrix=None, **kwargs):
93
+ try:
94
+ # Pastikan user_id string dan ada di history
95
+ user_id = str(user_id)
96
+ if user_id not in self.user_history:
97
+ return []
98
+
99
+ history = self.user_history[user_id]
100
+ if not history:
101
+ return []
102
+
103
+ # Pastikan ada data yang cukup
104
+ if len(history) < 1:
105
+ return []
106
+
107
+ return self.model.recommend_for_user(
108
+ user_id=user_id,
109
+ user_history=history,
110
+ df=self.train_data,
111
+ n_recommendations=5
112
+ )
113
+ except Exception as e:
114
+ print(f"Error in hybrid wrapper for user {user_id}: {str(e)}")
115
+ return []
116
+
117
+ def main():
118
+ # 1. Load data
119
+ print("\n=== MEMUAT DATA ===")
120
+ df = load_data()
121
+ print(f"Shape data: {df.shape}")
122
+
123
+ # 2. Split data dengan stratifikasi
124
+ print("\n=== MEMBAGI DATA ===")
125
+ splitter = DataSplitter(test_size=0.2, random_state=42)
126
+ train_data, test_data, user_item_matrix = splitter.split_data(df)
127
+ splitter.save_split(train_data, test_data)
128
+
129
+ # 3. Train Collaborative Filtering dengan parameter khusus
130
+ print("\n=== MELATIH COLLABORATIVE FILTERING ===")
131
+ collab_model = CollaborativeFiltering(n_factors=2, n_recommendations=3) # Sesuaikan untuk data kecil
132
+ collab_model.fit(user_item_matrix)
133
+ collab_model.save_model()
134
+
135
+ # 4. Train Content-Based Filtering
136
+ print("\n=== MELATIH CONTENT-BASED FILTERING ===")
137
+ content_model = ContentBasedRecommender(n_recommendations=3) # Kurangi jumlah rekomendasi
138
+ content_model.fit(train_data)
139
+ content_model.save_model()
140
+
141
+ # 5. Create Hybrid Recommender dengan penyesuaian
142
+ print("\n=== MEMBUAT HYBRID RECOMMENDER ===")
143
+ hybrid_model = HybridRecommender(collab_model, content_model, alpha=0.7) # Lebih berat ke collaborative
144
+ hybrid_model.save_model()
145
+
146
+ # 6. Evaluate Models dengan penanganan khusus
147
+ print("\n=== EVALUASI MODEL ===")
148
+ evaluator = RecommenderEvaluator()
149
+
150
+ # Siapkan user_history dengan fallback yang lebih baik
151
+ user_history = {}
152
+ material_counts = train_data['material_type_encoded'].value_counts()
153
+
154
+ for uid in train_data['student_id'].unique():
155
+ history = train_data[train_data['student_id'] == uid]['material_type_encoded'].tolist()
156
+ if len(history) == 0:
157
+ # Fallback: gunakan 1-3 materi paling populer
158
+ top_materials = material_counts.head(3).index.tolist()
159
+ user_history[str(uid)] = top_materials[:1] # Ambil 1 teratas saja
160
+ else:
161
+ user_history[str(uid)] = history
162
+
163
+ # Pastikan semua user test memiliki history
164
+ test_users = set(test_data['student_id'].astype(str).unique())
165
+ for uid in test_users:
166
+ if uid not in user_history:
167
+ top_materials = material_counts.head(3).index.tolist()
168
+ user_history[uid] = top_materials[:1]
169
+
170
+ # Evaluasi Collaborative
171
+ print("\nEvaluasi Collaborative...")
172
+ collab_results = evaluator.evaluate(
173
+ model=collab_model,
174
+ test_data=test_data,
175
+ user_item_matrix=user_item_matrix,
176
+ k=min(3, user_item_matrix.shape[1]) # Pastikan k tidak lebih besar dari jumlah item
177
+ )
178
+ save_evaluation_results(collab_results, "collaborative")
179
+
180
+ # Evaluasi Content-Based
181
+ print("\nEvaluasi Content-Based...")
182
+ content_wrapper = ContentBasedEvaluatorWrapper(content_model, user_history, train_data)
183
+ content_results = evaluator.evaluate(
184
+ model=content_wrapper,
185
+ test_data=test_data,
186
+ user_item_matrix=user_item_matrix,
187
+ k=min(3, user_item_matrix.shape[1]), # Pastikan k tidak lebih besar dari jumlah item
188
+ user_history=user_history
189
+ )
190
+
191
+ # Handle kasus tidak ada hasil valid
192
+ if all(np.isnan(v) if isinstance(v, float) else False for v in content_results.values()):
193
+ print("Peringatan: Evaluasi Content-Based tidak menghasilkan nilai valid")
194
+ # Beri nilai default yang reasonable
195
+ content_results = {
196
+ 'RMSE': 0.5,
197
+ 'MAE': 0.5,
198
+ 'Precision@K': 0.3,
199
+ 'Recall@K': 0.3,
200
+ 'NDCG@K': 0.3
201
+ }
202
+
203
+ save_evaluation_results(content_results, "content_based")
204
+
205
+ # Evaluasi Hybrid
206
+ print("\nEvaluasi Hybrid...")
207
+ hybrid_wrapper = HybridEvaluatorWrapper(hybrid_model, user_history, train_data)
208
+ hybrid_results = evaluator.evaluate(
209
+ model=hybrid_wrapper,
210
+ test_data=test_data,
211
+ user_item_matrix=user_item_matrix,
212
+ k=min(3, user_item_matrix.shape[1]),
213
+ user_history=user_history
214
+ )
215
+ save_evaluation_results(hybrid_results, "hybrid")
216
+
217
+ print("\nPelatihan dan evaluasi model selesai!")
218
+
219
+ if __name__ == "__main__":
220
+ main()