山本Tさん卒論
の編集
Top
/
山本Tさん卒論
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
島部/menu/template
[[技術資料]] *目次 [#e890b3d5] #CONTENTS *研究内容 [#ccda06db] **目的 [#h986282d] -本研究は、大学における教学データ(成績・履修履歴・レビュー等)を活用し、学生一人ひとりの学習成果の最大化と将来の進路(就職・進学)に資する最適な科目選択・教材推薦を支援するシステムの構築を目的とする。 -推薦の信頼性を高めるために、レビューの信頼性指標(類似性・集中性・情報性など)を考慮し、教材や科目選択の質を担保する。 -従来の学習支援では、主にGPAの向上や履修支援に焦点が当てられてきたが、本研究ではそれに加えて、学生の希望進路や志望企業の傾向も推薦指標に組み込み、より実践的・目的志向型の学習支援を目指す。 &br; **実現目標 [#v983808a] -過去の卒業生データから、成績予測モデルを構築し、未履修科目の推定評価を行う -単位要件(卒業・必修・選択必修)を満たしつつ、希望進路に有利な科目を優先的に推薦 -シラバスやYouTube等から教材を自動取得し、信頼性スコアに基づき表示 -最終的には、キャリアパスに沿った学習ナビゲーションを可能にする統合型支援システムの実装を目指す &br; *準備 [#u3fe939b] プログラムは iie.lab.tpu.2526のドライブより 学生/25_o4山本/プログラム/main.zip にて保存(2025/06/24更新) **ファイル説明 [#j07bdc76] |扱うデータ|用途|ファイル名|ファイルの場所| |アプリケーション全体| | | | |アプリケーションの起動|Flaskサーバーを起動する|run.py|main/| |アプリケーション本体|全てのWebページ(ルート)の処理、主要ロジック|app.py|main/app/| |設定ファイル|秘密鍵(SECRET_KEY)やソルト(SALT)の保存|key.py|main/app/| |計算モジュール|科目推薦やレビュー信頼度の計算関数群|Recommend.py|main/| |データベース| | | | |ユーザー認証情報|学籍番号、ハッシュ化パスワード|StudentKey.db|main/| |成績・メタデータ|学生の成績、古い科目メタデータ|StudentData.db|main/| |年度別マスターデータ| | | | |年度ごとの科目情報|科目名、フォルダ名、区分、単位数、必選、配当など|course_catalog_YYYY.csv|main/catalogs/| |教材データ| | | | |各回の教材リスト|特定の講義回で表示する教材のリスト(Webサイト、動画)|kyouzai_X.csv video_kyouzai_X.csv|main/app/Kamoku/{科目名}/Kyouzai/| |各回のレビューデータ|ユーザーが投稿したレビューの保存先(自動生成)|Kyouzai_X_Review.csv|main/app/Kamoku/{科目名}/Kyouzai/| |シラバス作成データ| | | | |教員と担当科目|教員名と担当科目の対応リスト|main/teacher.csv|main/| |授業計画データ|作成されたシラバスの授業計画(自動生成)|{科目名}_Custom.csv|main/app/templates/{科目名}/| |ページの見た目 (HTML)|| | | |ログイン・新規登録|ログインページ、新規登録ページ|top.html, newcomer.html|main/app/templates/| |メインページ|ログイン後の履修状況・推薦科目表示ページ|index.html|main/app/templates/| |科目トップ(一覧)|各科目の講義回一覧を表示するページ|{科目名}.html|main/app/templates/{科目名}/| |講義詳細(汎用)|各講義の教材やレビュー機能を表示する共通ページ|lecture_page.html|main/app/templates/{科目名}/| |シラバス(教員用)|シラバス作成・確認用の一連のページ|teacher.html, subject.html, syllabus.html, true_syllabus.html|main/app/templates/| |カスタムシラバス|保存されたシラバスのHTML(自動生成)|{科目名}_Custom.html|main/app/templates/{科目名}/| &br; **環境とインストール [#wc985780] Python3.11にて動作確認済み ~ Webアプリケーション基盤 (Flask) |Package |Version |役割・目的| |Flask |2.2.2 |Webアプリケーションのフレームワーク本体。| |Jinja2 |3.1.4 |HTMLテンプレートを処理するエンジン。| |Werkzeug |2.2.2 |Flaskの基盤となるWSGIツールキット。| |itsdangerous |2.2.0 |ログイン状態(セッション)などを安全に保つための署名ライブラリ。| |click |8.1.7 |Flaskのコマンドライン機能をサポート。| |blinker |1.9.0 |Flask内部のイベント通知システム。| ~ データ分析・数値計算 (Pandas & Scikit-learn) |Package |Version |役割・目的| |pandas |1.3.5 |CSVの読み書き、データ集計・加工など、データ分析の中核。| |numpy |1.26.4 |高速な数値計算の基盤。PandasとScikit-learnが依存。| |scikit-learn |1.5.2 |キャリア推薦の機械学習モデル(ロジスティック回帰)で使用。| |scipy |1.11.4 |Scikit-learnが依存する科学計算ライブラリ。| |joblib |1.4.2 |Scikit-learnが依存する処理の並列化ライブラリ。| |threadpoolctl |3.5.0 |Scikit-learnの計算処理を制御するために依存。| |python-dateutil |2.9.0.post0 |Pandasが依存する日付・時刻処理ライブラリ。| |pytz |2024.2 |Pandasが依存するタイムゾーン処理ライブラリ。| ~ 日本語処理 (Mecab) |Package |Version |役割・目的| |mecab |0.996.5 |レビュー信頼度計算で使う、日本語の形態素解析エンジン。| |ipadic |1.0.0 |Mecabが使用する標準的な日本語辞書。| ~ 外部API連携 (Google API) |Package |Version |役割・目的| |google-api-python-client |2.177.0 |教材自動収集機能で、GoogleのAPIを呼び出すためのクライアント。| |google-auth |2.36.0 |APIの認証処理を担当。| |google-auth-httplib2 |0.2.0 |認証で使うHTTPクライアント。| |google-api-core |2.23.0 |Google APIクライアントのコア機能。| |httplib2 |0.22.0 |HTTP通信ライブラリ。| |uritemplate |4.1.1 |URLのテンプレートを扱うライブラリ。| |protobuf |5.28.3 |Googleが開発したデータ交換フォーマット。| |rsa |4.9 |認証で使われる暗号化ライブラリ。| |pyasn1 |0.6.1 |認証で使われるデータ構造ライブラリ。| |pyasn1-modules |0.4.1 |pyasn1の拡張モジュール。| |cachetools |5.5.0 |認証情報のキャッシュ管理。| ~ ***MeCab導入方法 [#l2d13af4] -Mecab をインストールする --Python に MeCab を pip した後に、PC本体にも入れる必要がある https://github.com/ikegami-yukino/mecab/releases/tag/v0.996 -パスを通しておく(システム環境変数の編集で変数Pathを編集する) -新規でmecab.exeがあるパスを追加する C:\Program Files\MeCab\bin\ ~ *** MeCab導入確認 [#g5535d54] -下のMeCabテスト用のプログラムを実行して結果が出れば問題ない #ref(MeCab_test.ipynb,,MeCab_test.ipynb) ~ ~ ~ * 操作手順書 [#r6ce2bfa] このドキュメントは、提供されたFlaskアプリケーションの操作手順と画面遷移について説明します。 本アプリケーションは、大きく分けて以下の4つの機能群から構成されます。 - ''学生向け機能'': ログイン、履修状況の確認、協調フィルタリングやキャリアに基づいた科目推薦など - ''教員向け機能'': 担当する授業のシラバス作成・登録 - ''汎用科目ページ機能'': 各科目の講義詳細や教材レビュー - ''管理者向け機能'': データベースのメンテナンス ** 主なアルゴリズムの解説 [#nbf31627] 本システムで採用されている特徴的な3つのアルゴリズムについて解説します。 *** 1. 協調フィルタリングによる科目推薦 [#f5d25f41] - ''目的'': 学生一人ひとりの履修履歴に基づき、興味を持ちそうな科目を個別に推薦します。 - ''解説'': 「あなたと履修科目の好みが似ている学生は、こんな科目も高く評価していますよ」という考え方に基づいています。まず、全学生の中からログインしているあなたと履修パターンが似ている(=相関関係が高い)学生を探し出します。次に、その似ている学生が履修済みで、かつあなたが高く評価しそうな未履修の科目をリストアップし、推薦スコアの高い順に表示します。この一連の手法を''協調フィルタリング''と呼びます。 - ''関連コード (Recommend.py)'' #code(python){{ def get_correlation_coefficents(data_all_np, target_user_index): """指定学生と他の全学生の類似度(相関係数)を計算""" similarities = [] target = data_all_np[target_user_index] for i, score in enumerate(data_all_np): # ... (両者が評価済みの科目のみで相関係数を計算) ... similarity = np.corrcoef(target[indices], score[indices])[0, 1] if not np.isnan(similarity): similarities.append((i, similarity)) return sorted(similarities, key=lambda s: s[1], reverse=True) def rank_items(data_all_np, similarities, target_user_index): """未履修科目の予測評価値を算出し、ランキング化する""" rankings = [] # ... (未履修の各科目に対してループ) ... for i in range(num_items): if target[i] >= 0: # 履修済みはスキップ continue # 類似度の高い他の学生の評価を元に、予測値を計算 rankings.append((i, predict(data_all_np, similarities, target_user_index, i))) return sorted(rankings, key=lambda r: r[1], reverse=True) }} *** 2. 機械学習によるキャリアベースの科目推薦 [#t8e3dc9a] - ''目的'': 学生が希望する業種への就職に、どの科目の履修が有効だったかを分析し、推薦します。 - ''解説'': これは「希望する業種に就職した先輩たちは、どの科目を履修していたか?」という問いに、機械学習モデルで答える機能です。過去の学生の「履修データ(成績)」と「就職先の業種」を教師データとして、''ロジスティック回帰''という分類モデルを訓練します。モデルは、各科目が特定の業種への就職とどれくらい強く関連しているか(=''重要度'')を学習します。この重要度が高い順に、未履修の科目を推薦します。 - ''関連コード (career_recommender.py)'' #code(python){{ def get_career_recommendations(target_industry, target_student_id, df_employment, df_grades): # ... (データ準備) ... # 1. 就職先データから、目標業種に行った学生(1)とそれ以外(0)の正解ラベルyを作成 target_graduates = df_employment[df_employment['業種'] == target_industry]['学籍番号'].tolist() y = X.index.isin(target_graduates).astype(int) # 2. ロジスティック回帰モデルを定義し、訓練(fit)する # L1正則化(penalty='l1')で、特に重要な科目の係数だけが残るようにする model = LogisticRegression(class_weight='balanced', C=1.0, penalty='l1', solver='liblinear', random_state=42) model.fit(X, y) # 3. 学習後の係数(model.coef_)を「重要度」として取り出す df_importance = pd.DataFrame({'科目名': X.columns, '重要度': model.coef_[0]}) df_importance_sorted = df_importance.sort_values('重要度', ascending=False) # 4. 履修済み科目を除外して推薦リストを作成 recommendations = df_importance_sorted[~df_importance_sorted['科目名'].isin(taken_courses)] return "成功", recommendations.head(10) }} *** 3. レビューの信頼度スコアリング [#gb9e6445] - ''目的'': 教材レビューの信頼性を多角的に評価し、やらせやスパムのような低品質なレビューの影響を低減します。 - ''解説'': レビューの評価を単純な平均点にせず、以下の3つの指標を組み合わせて''信頼度 (Credibility)''を算出します。これにより、教材の評価順位の信頼性を高めています。 -- ''1. 類似度 (Similarity)'': 他人のレビューのコピペや、同じ人物による酷似した内容の連続投稿を検出します。レビュー間のテキストの類似度(Jaccard係数)を計算し、スコアが異常に高いレビューの信頼性を下げます。 -- ''2. 情報量 (Informative)'': レビューに具体性や有用な情報が含まれているかを評価します。レビューから名詞を抽出し、他のレビューではあまり使われていない専門的な単語(TF-IDFの考え方に類似)が多く含まれているほど、情報量が多いと判断します。 -- ''3. 集中性 (Concentration)'': 特定の短期間に不自然な高評価レビューが集中していないかを検出します。株価分析で使われるMACDという時系列分析の手法を応用し、レビュー投稿の「急騰」を検知して、その期間のレビューの信頼性を調整します。 - ''関連コード (Recommend.py)'' #code(python){{ def Credibility(S_score_norm, I_score_norm, C_score_norm, HPnumber, df): """類似度・情報量・集中性の3つのスコアから最終的な信頼度を計算する""" F_score = [] # ... (対象教材のレビューを取得) ... # 3つのスコアを平均して、総合的な信頼性指標F_scoreを算出 for i in range(len(index)): F_score.append((S_score_norm[index[i]] + I_score_norm[index[i]] + C_score_norm[index[i]]) / 3) # ... (最終的なスコアを計算) ... return F_cre_score, Ave_score # レビュー投稿時に呼び出されるメイン処理 def _process_review(...): # ... (レビューをファイルに保存) ... # 信頼度計算に必要な各スコアを算出 all_reviews_df = _read_csv_with_fallback(review_filepath) S_score_norm = Similarity(all_reviews_df) I_score_norm = Informative(all_reviews_df) C_score_norm = Concentration(all_reviews_df) # 信頼度スコアを計算 Credibility_score, Ave_score = credibility_func(...) # 最終的な評価値をマスターファイルに保存 df_master.at[item_original_index, '評価'] = final_score df_master.to_csv(filepath, index=False, encoding='utf-8-sig') }} --- ** 学生向け機能 [#bc31bb50] 学生としてシステムを利用する際の操作手順です。 *** ログイン・ログアウト [#e6ec0d60] 登録済みのアカウントでシステムにアクセスします。 - ''操作手順 (ログイン)'' -- 1. トップページ (''/top'') にアクセスします。 ~&ref(top.png,nolink,800x); -- 2. ''学籍番号'' と ''パスワード'' を入力し、「ログイン」ボタンをクリックします。 -- 3. 認証が成功すると、メインページ (''/index'') へ遷移します。 ~&ref(index.png,nolink,800x); - ''操作手順 (ログアウト)'' -- 1. ページ上部にある「ログアウト」ボタンをクリックします。 -- 2. セッションが破棄され、トップページ (''/top'') へ遷移します。 *** 履修状況確認と科目推薦 (メインページ) [#qe2cc390] ログイン後に表示されるメインページで、自身の履修状況や推薦科目を確認します。 - ''画面説明 (''/index'')'' ~&ref(index.png,nolink,800x); -- ''履修状況'': 自身のこれまでの履修科目と成績評価(◎, ▲, △, 〇, ✕)が表形式で表示されます。 -- ''推薦科目'': 以下のロジックに基づいて推薦された科目がリスト表示されます。 --- ''協調フィルタリング'': 履修傾向が類似する他の学生のデータから、未履修で評価が高いと予測される科目を推薦します。 --- ''卒業要件'': 卒業に必要な単位が不足している区分がある場合、その区分の科目を優先的に推薦します。 ~&ref(cmd_index.png,nolink,800x); -- 各推薦科目のリンクをクリックすると、後述の ''科目トップページ'' (''/kamoku/<科目名>'') へ遷移します。 *** キャリアベースの科目推薦 [#o21d15f0] 希望する進路(業種)に基づいて、履修すべき科目の推薦を受けます。 - ''操作手順'' -- 1. メインページなどから「キャリア推薦」ページ (''/career'') へ移動します。 ~&ref(career.png,nolink,800x); -- 2. プルダウンメニューから、興味のある ''業種'' を選択します。 ~&ref(career_pull.png,nolink,800x); -- 3. 「推薦を表示」などのボタンをクリックします。 -- 4. 過去のキャリアデータから学習を開始、利用者の履修済み科目を除いた推薦科目がリスト化されます。 ~&ref(cmd_career.png,nolink,800x); -- 5. ページ内に、推薦された科目がリストとして表示されます。 ~&ref(career_list.png,nolink,800x); ** 教員向け機能 (シラバス作成) [#t03b9ed0] 教員が担当科目のシラバスを作成し、システムに登録する手順です。 *** 1. シラバス情報入力 [#bd3fb1ef] - ''操作手順'' -- 1. トップページ (''/top'') にアクセスします。 ~&ref(top_teacher.png,nolink,800x); -- 2. 教員を選択した状態で''教員ID'' と ''パスワード'' を入力し、「ログイン」ボタンをクリックします。 -- 3. 認証が成功すると、シラバス作成ページ (''/subject'') へ遷移します。 ~&ref(subject.png,nolink,800x); -- 4. 担当科目選択ページ (''/subject'') で、自分が作成したい ''授業タイトル'' を選択します。 ~&ref(subject_select.png,nolink,800x); -- 5. シラバスに必要な各種項目(英語科目名、科目区分、授業概要、到達目標、授業計画、キーワードなど)を入力します。 -- 6. 全ての入力が終わったら、「作成」や「プレビュー」ボタンをクリックします。 *** 2. プレビューと保存 [#uc864b63] - ''操作手順'' -- 1. シラバスプレビューページ (''/result'') に、入力内容が整形された形で表示されます。内容を確認します。 ~&ref(result.png,nolink,800x); -- 2. 内容に問題がなければ、「保存」ボタンをクリックします。 --3. シラバス全体がHTMLファイルとしてサーバーに保存され、処理完了後は最初の教員選択ページ (''/teacher'') に戻ります。 --- ''保存先'': ''app/templates/<科目URL名>/<科目URL名>_Custom.html''(シラバス画面) --- ''保存先'': ''app/templates/<科目URL名>/<科目URL名>_Custom.csv''(キーワード) ~&ref(cmd_result.png,nolink,800x); ** 汎用科目ページ機能 [#ff99ae2a] 学生が推薦された科目や履修中の科目について、詳細情報を確認する機能です。 *** 科目トップページ [#n6ba88d5] 各科目のポータルとなるページです。 - ''アクセス方法'' -- メインページ (''/index'') の推薦科目リストから科目名をクリックします。 ~&ref(index.png,nolink,800x); - ''画面説明 (''/kamoku/<科目名>'')'' ~&ref(kamoku.png,nolink,800x); -- ''講義一覧'': 第1回から第15回までの講義内容へのリンクがリスト表示されます。 -- ''シラバス表示'': 教員によってカスタムシラバスが作成されている場合、それを表示するリンクが表示されます。 *** 各回講義ページとレビュー投稿 [#t613dd41] - ''操作手順'' -- 1. 科目トップページから、閲覧したい回の講義リンクをクリックすると、講義詳細ページ (''/kamoku/<科目名>/lecture/<回数>'') へ遷移します。 -- 2. ページには、その回の ''講義タイトル'' や、参考となる ''Webサイト教材''・''動画教材'' が表示されます。 ~&ref(kyouzai.png,nolink,800x); -- 3. 各教材の下にあるフォームから、5段階評価とコメントを入力して「投稿」ボタンをクリックすることで、教材のレビューができます (''/kamoku/.../review'')。 ~&ref(kyouzai_score.png,nolink,800x); -- 4. レビューを投稿すると、教材の信頼度スコアが再計算され、教材リストの表示順に反映されることがあります。 ~&ref(kyouzai_result.png,nolink,800x); ** 管理者向け機能 [#j1649cee] システムのデータベースを直接管理するための機能です。アクセスは管理者のみに制限されている想定です。 *** 管理トップページ [#oaf284c2] - ''アクセス方法'': URL ''/admin'' を直接入力します。 ~&ref(url_admin.png,nolink,800x); - ''画面説明'' ~&ref(admin.png,nolink,800x); -- ''テーブル一覧'': ''StudentData.db'' 内の全テーブル名がリスト表示されます。各テーブル名をクリックすると、''テーブル閲覧ページ'' に遷移します。 -- ''CSVアップロード'': CSVファイルを選択し、データを格納したいテーブル名を指定して、データベースにデータを一括追加できます。 ~&ref(table_add.png,nolink,800x); -- ''テーブル削除'': テーブル名を指定して、データベースからテーブルを完全に削除できます。 ~&ref(table_delete.png,nolink,800x); *** テーブル閲覧・編集・削除 [#va0d6c1a] - ''操作手順'' ~&ref(table.png,nolink,800x); -- 1. 管理トップページ (''/admin'') でテーブル名をクリックすると、そのテーブルの内容が一覧表示されます (''/admin/table/<テーブル名>'')。 -- 2. 各行の右側にある ''「編集」'' ボタンをクリックすると、行データ編集ページ (''/admin/table/.../edit/<行ID>'') に遷移し、フォームでデータを更新できます。 ~&ref(edit.png,nolink,800x); -- 3. 各行の右側にある ''「削除」'' ボタンをクリックすると、その行のデータが削除されます (''/admin/table/.../delete/<行ID>'')。 -- 4. 編集・削除処理後は、元のテーブル閲覧ページにリダイレクトされます。 *数値実験1:協調フィルタリングによる科目推薦の動作検証 [#iedd3c3c] **目的 [#bcf9e4e6] -本システムにベース機能として実装されている、一般的な協調フィルタリングによる科目推薦が、どの程度の精度を持つかを定量的に評価し、現状の性能を把握する。~ ~ **準備 [#j559bdb1] プログラムは iie.lab.tpu.2526のドライブより 学生/25_o4山本/プログラム/test1.zip にて保存(2025/07/08更新) |扱うデータ|用途|ファイル名|ファイルの場所| |実験用ファイル| | | | |計算モジュール|科目推薦の計算関数群|Recommend.py|test1/| |実験用データ|学生の成績データ|grades.csv|test1/| |実験実行ファイル|実験の実行と結果のグラフ化|experiment1_kamoku_suisen.py|test1/| |実験実行ファイル|データ生成|generate_dataset.py|test1/| |実験結果|データ数と精度の関係を示すグラフ|accuracy_comparison_graph.png|test1/| ~ **実験内容 [#d93e47c5] -ホールドアウト法を用いる。~ 各学生の履修履歴の20%を「正解データ」として隠し、残りの80%から推薦を生成。学生数を段階的に増やしながら、推薦リストに「正解データ」がどれだけ含まれるかを適合率 (Precision) と再現率 (Recall) で評価する。~ ~ **実験手順 [#k7938f51] **実験結果 [#j6e9fb4b] #ref(数値実験_実験手順_004.png,nolink,800x); #ref(accuracy_comparison_graph.png,nolink,800x); -グラフから、学習データの学生数が増えるにつれて精度が安定するものの、約20%で頭打ちになる傾向が見られた。~ **考察 [#lb203ba7] ~ ~ ~ *数値実験2:レビュー信頼度スコアの有効性検証 [#w89cd5f1] **目的 [#s279e405] -教材の質を測る上で、単純な平均評価点だけでなく、レビュー内容の質も考慮する信頼度スコアが、意図通りに機能するかを検証する。~ ~ **準備 [#i9ed2952] プログラムは iie.lab.tpu.2526のドライブより 学生/25_o4山本/プログラム/test2.zip にて保存(2025/07/01更新) |扱うデータ|用途|ファイル名|ファイルの場所| |実験用ファイル| | | | |計算モジュール|レビュー信頼度の計算関数群|Recommend.py|test2/| |実験用データ|教材のマスターデータ|materials.csv|test2/| |実験用データ|教材へのレビューデータ|reviews.csv|test2/| |実験実行ファイル|実験の実行と結果の要約・グラフ化|experiment2_kyouzai_shinraido.py|test2/| |実験結果|「平均評価」と「最終信頼度スコア」の比較グラフ|report_graph.png|test2/| ~ **実験内容 [#pc46e999] -「コピーレビュー」や「短文レビュー」といった、意図的に質の低いレビューを含むデータセットを用意する。~ -各レビューに類似度(S)・情報量(I)・集中度(C)の3つの観点でペナルティを計算し、元の評価点に適用。最終的な「信頼度スコア」を算出する。~ -質の低いレビューが投稿された教材の信頼度スコアが、元の平均評価から妥当な形で引き下げられているかを確認する。~ ~ **実験手順 [#y216e87f] **実験結果 [#t2199a54] &ref(数値実験_実験手順_006.png,nolink,800x); &ref(report_graph.png,nolink,800x); -類似度スコアと情報量スコアは、それぞれコピーレビューと短文レビューを正しく検出し、該当教材のスコアを効果的に引き下げることを確認した。~ただし、集中度スコアの計算ロジックはうまく起動していないことがわかる。 ~ **考察 [#udcc29bc] ~ ~ ~ *数値実験3: [#z93e971c] **目的 [#p490da6b] -本研究で主軸として提案する、機械学習を用いたキャリアパス推薦が、卒業生の就職先データから「特定の業種と関連の強いキー科目」を正しく抽出できるかを検証する。&br; **準備 [#fcb504c6] プログラムは iie.lab.tpu.2526のドライブより 学生/25_o4山本/プログラム/test3.zip にて保存(2025/07/08更新) |扱うデータ|用途|ファイル名|ファイルの場所| |実験用ファイル| | | | |計算モジュール|キャリアパス推薦の計算ロジック|career_recommender.py|test3/| |データ生成|実験用の大規模なダミーデータを生成|create_test_dataset.py|test3/| |就職先データ|生成された卒業生の就職先リスト|employment_data.csv|test3/| |履修状況データ|全学生の履修状況の0/1行列|all_grades_matrix.csv|test3/| ~ **実験内容 [#k78c60bf] -「IT業界に進む学生はネットワーク関連科目を履修しがち」のような、意図的な相関関係を持つ、大規模なダミーデータを生成。~ -L1正則化ロジスティック回帰モデルを使用。全卒業生の「履修科目パターン」と「就職業種」を学習させ、各科目が特定の業種への就職に与える影響度を「重要度スコア」として算出する。~ -モデルが算出した「重要度スコア」が、データに仕込んだ傾向と一致しているかを確認する。~ **実験手順 [#e63483c0] **実験結果 [#ydc86d74] #ref(test3データ生成.png,nolink,800x); #ref(test3科目推薦.png,nolink,800x); **考察 [#g1455153] *その他 [#td0f2a65] **その他 [#sbb67277]
タイムスタンプを変更しない
[[技術資料]] *目次 [#e890b3d5] #CONTENTS *研究内容 [#ccda06db] **目的 [#h986282d] -本研究は、大学における教学データ(成績・履修履歴・レビュー等)を活用し、学生一人ひとりの学習成果の最大化と将来の進路(就職・進学)に資する最適な科目選択・教材推薦を支援するシステムの構築を目的とする。 -推薦の信頼性を高めるために、レビューの信頼性指標(類似性・集中性・情報性など)を考慮し、教材や科目選択の質を担保する。 -従来の学習支援では、主にGPAの向上や履修支援に焦点が当てられてきたが、本研究ではそれに加えて、学生の希望進路や志望企業の傾向も推薦指標に組み込み、より実践的・目的志向型の学習支援を目指す。 &br; **実現目標 [#v983808a] -過去の卒業生データから、成績予測モデルを構築し、未履修科目の推定評価を行う -単位要件(卒業・必修・選択必修)を満たしつつ、希望進路に有利な科目を優先的に推薦 -シラバスやYouTube等から教材を自動取得し、信頼性スコアに基づき表示 -最終的には、キャリアパスに沿った学習ナビゲーションを可能にする統合型支援システムの実装を目指す &br; *準備 [#u3fe939b] プログラムは iie.lab.tpu.2526のドライブより 学生/25_o4山本/プログラム/main.zip にて保存(2025/06/24更新) **ファイル説明 [#j07bdc76] |扱うデータ|用途|ファイル名|ファイルの場所| |アプリケーション全体| | | | |アプリケーションの起動|Flaskサーバーを起動する|run.py|main/| |アプリケーション本体|全てのWebページ(ルート)の処理、主要ロジック|app.py|main/app/| |設定ファイル|秘密鍵(SECRET_KEY)やソルト(SALT)の保存|key.py|main/app/| |計算モジュール|科目推薦やレビュー信頼度の計算関数群|Recommend.py|main/| |データベース| | | | |ユーザー認証情報|学籍番号、ハッシュ化パスワード|StudentKey.db|main/| |成績・メタデータ|学生の成績、古い科目メタデータ|StudentData.db|main/| |年度別マスターデータ| | | | |年度ごとの科目情報|科目名、フォルダ名、区分、単位数、必選、配当など|course_catalog_YYYY.csv|main/catalogs/| |教材データ| | | | |各回の教材リスト|特定の講義回で表示する教材のリスト(Webサイト、動画)|kyouzai_X.csv video_kyouzai_X.csv|main/app/Kamoku/{科目名}/Kyouzai/| |各回のレビューデータ|ユーザーが投稿したレビューの保存先(自動生成)|Kyouzai_X_Review.csv|main/app/Kamoku/{科目名}/Kyouzai/| |シラバス作成データ| | | | |教員と担当科目|教員名と担当科目の対応リスト|main/teacher.csv|main/| |授業計画データ|作成されたシラバスの授業計画(自動生成)|{科目名}_Custom.csv|main/app/templates/{科目名}/| |ページの見た目 (HTML)|| | | |ログイン・新規登録|ログインページ、新規登録ページ|top.html, newcomer.html|main/app/templates/| |メインページ|ログイン後の履修状況・推薦科目表示ページ|index.html|main/app/templates/| |科目トップ(一覧)|各科目の講義回一覧を表示するページ|{科目名}.html|main/app/templates/{科目名}/| |講義詳細(汎用)|各講義の教材やレビュー機能を表示する共通ページ|lecture_page.html|main/app/templates/{科目名}/| |シラバス(教員用)|シラバス作成・確認用の一連のページ|teacher.html, subject.html, syllabus.html, true_syllabus.html|main/app/templates/| |カスタムシラバス|保存されたシラバスのHTML(自動生成)|{科目名}_Custom.html|main/app/templates/{科目名}/| &br; **環境とインストール [#wc985780] Python3.11にて動作確認済み ~ Webアプリケーション基盤 (Flask) |Package |Version |役割・目的| |Flask |2.2.2 |Webアプリケーションのフレームワーク本体。| |Jinja2 |3.1.4 |HTMLテンプレートを処理するエンジン。| |Werkzeug |2.2.2 |Flaskの基盤となるWSGIツールキット。| |itsdangerous |2.2.0 |ログイン状態(セッション)などを安全に保つための署名ライブラリ。| |click |8.1.7 |Flaskのコマンドライン機能をサポート。| |blinker |1.9.0 |Flask内部のイベント通知システム。| ~ データ分析・数値計算 (Pandas & Scikit-learn) |Package |Version |役割・目的| |pandas |1.3.5 |CSVの読み書き、データ集計・加工など、データ分析の中核。| |numpy |1.26.4 |高速な数値計算の基盤。PandasとScikit-learnが依存。| |scikit-learn |1.5.2 |キャリア推薦の機械学習モデル(ロジスティック回帰)で使用。| |scipy |1.11.4 |Scikit-learnが依存する科学計算ライブラリ。| |joblib |1.4.2 |Scikit-learnが依存する処理の並列化ライブラリ。| |threadpoolctl |3.5.0 |Scikit-learnの計算処理を制御するために依存。| |python-dateutil |2.9.0.post0 |Pandasが依存する日付・時刻処理ライブラリ。| |pytz |2024.2 |Pandasが依存するタイムゾーン処理ライブラリ。| ~ 日本語処理 (Mecab) |Package |Version |役割・目的| |mecab |0.996.5 |レビュー信頼度計算で使う、日本語の形態素解析エンジン。| |ipadic |1.0.0 |Mecabが使用する標準的な日本語辞書。| ~ 外部API連携 (Google API) |Package |Version |役割・目的| |google-api-python-client |2.177.0 |教材自動収集機能で、GoogleのAPIを呼び出すためのクライアント。| |google-auth |2.36.0 |APIの認証処理を担当。| |google-auth-httplib2 |0.2.0 |認証で使うHTTPクライアント。| |google-api-core |2.23.0 |Google APIクライアントのコア機能。| |httplib2 |0.22.0 |HTTP通信ライブラリ。| |uritemplate |4.1.1 |URLのテンプレートを扱うライブラリ。| |protobuf |5.28.3 |Googleが開発したデータ交換フォーマット。| |rsa |4.9 |認証で使われる暗号化ライブラリ。| |pyasn1 |0.6.1 |認証で使われるデータ構造ライブラリ。| |pyasn1-modules |0.4.1 |pyasn1の拡張モジュール。| |cachetools |5.5.0 |認証情報のキャッシュ管理。| ~ ***MeCab導入方法 [#l2d13af4] -Mecab をインストールする --Python に MeCab を pip した後に、PC本体にも入れる必要がある https://github.com/ikegami-yukino/mecab/releases/tag/v0.996 -パスを通しておく(システム環境変数の編集で変数Pathを編集する) -新規でmecab.exeがあるパスを追加する C:\Program Files\MeCab\bin\ ~ *** MeCab導入確認 [#g5535d54] -下のMeCabテスト用のプログラムを実行して結果が出れば問題ない #ref(MeCab_test.ipynb,,MeCab_test.ipynb) ~ ~ ~ * 操作手順書 [#r6ce2bfa] このドキュメントは、提供されたFlaskアプリケーションの操作手順と画面遷移について説明します。 本アプリケーションは、大きく分けて以下の4つの機能群から構成されます。 - ''学生向け機能'': ログイン、履修状況の確認、協調フィルタリングやキャリアに基づいた科目推薦など - ''教員向け機能'': 担当する授業のシラバス作成・登録 - ''汎用科目ページ機能'': 各科目の講義詳細や教材レビュー - ''管理者向け機能'': データベースのメンテナンス ** 主なアルゴリズムの解説 [#nbf31627] 本システムで採用されている特徴的な3つのアルゴリズムについて解説します。 *** 1. 協調フィルタリングによる科目推薦 [#f5d25f41] - ''目的'': 学生一人ひとりの履修履歴に基づき、興味を持ちそうな科目を個別に推薦します。 - ''解説'': 「あなたと履修科目の好みが似ている学生は、こんな科目も高く評価していますよ」という考え方に基づいています。まず、全学生の中からログインしているあなたと履修パターンが似ている(=相関関係が高い)学生を探し出します。次に、その似ている学生が履修済みで、かつあなたが高く評価しそうな未履修の科目をリストアップし、推薦スコアの高い順に表示します。この一連の手法を''協調フィルタリング''と呼びます。 - ''関連コード (Recommend.py)'' #code(python){{ def get_correlation_coefficents(data_all_np, target_user_index): """指定学生と他の全学生の類似度(相関係数)を計算""" similarities = [] target = data_all_np[target_user_index] for i, score in enumerate(data_all_np): # ... (両者が評価済みの科目のみで相関係数を計算) ... similarity = np.corrcoef(target[indices], score[indices])[0, 1] if not np.isnan(similarity): similarities.append((i, similarity)) return sorted(similarities, key=lambda s: s[1], reverse=True) def rank_items(data_all_np, similarities, target_user_index): """未履修科目の予測評価値を算出し、ランキング化する""" rankings = [] # ... (未履修の各科目に対してループ) ... for i in range(num_items): if target[i] >= 0: # 履修済みはスキップ continue # 類似度の高い他の学生の評価を元に、予測値を計算 rankings.append((i, predict(data_all_np, similarities, target_user_index, i))) return sorted(rankings, key=lambda r: r[1], reverse=True) }} *** 2. 機械学習によるキャリアベースの科目推薦 [#t8e3dc9a] - ''目的'': 学生が希望する業種への就職に、どの科目の履修が有効だったかを分析し、推薦します。 - ''解説'': これは「希望する業種に就職した先輩たちは、どの科目を履修していたか?」という問いに、機械学習モデルで答える機能です。過去の学生の「履修データ(成績)」と「就職先の業種」を教師データとして、''ロジスティック回帰''という分類モデルを訓練します。モデルは、各科目が特定の業種への就職とどれくらい強く関連しているか(=''重要度'')を学習します。この重要度が高い順に、未履修の科目を推薦します。 - ''関連コード (career_recommender.py)'' #code(python){{ def get_career_recommendations(target_industry, target_student_id, df_employment, df_grades): # ... (データ準備) ... # 1. 就職先データから、目標業種に行った学生(1)とそれ以外(0)の正解ラベルyを作成 target_graduates = df_employment[df_employment['業種'] == target_industry]['学籍番号'].tolist() y = X.index.isin(target_graduates).astype(int) # 2. ロジスティック回帰モデルを定義し、訓練(fit)する # L1正則化(penalty='l1')で、特に重要な科目の係数だけが残るようにする model = LogisticRegression(class_weight='balanced', C=1.0, penalty='l1', solver='liblinear', random_state=42) model.fit(X, y) # 3. 学習後の係数(model.coef_)を「重要度」として取り出す df_importance = pd.DataFrame({'科目名': X.columns, '重要度': model.coef_[0]}) df_importance_sorted = df_importance.sort_values('重要度', ascending=False) # 4. 履修済み科目を除外して推薦リストを作成 recommendations = df_importance_sorted[~df_importance_sorted['科目名'].isin(taken_courses)] return "成功", recommendations.head(10) }} *** 3. レビューの信頼度スコアリング [#gb9e6445] - ''目的'': 教材レビューの信頼性を多角的に評価し、やらせやスパムのような低品質なレビューの影響を低減します。 - ''解説'': レビューの評価を単純な平均点にせず、以下の3つの指標を組み合わせて''信頼度 (Credibility)''を算出します。これにより、教材の評価順位の信頼性を高めています。 -- ''1. 類似度 (Similarity)'': 他人のレビューのコピペや、同じ人物による酷似した内容の連続投稿を検出します。レビュー間のテキストの類似度(Jaccard係数)を計算し、スコアが異常に高いレビューの信頼性を下げます。 -- ''2. 情報量 (Informative)'': レビューに具体性や有用な情報が含まれているかを評価します。レビューから名詞を抽出し、他のレビューではあまり使われていない専門的な単語(TF-IDFの考え方に類似)が多く含まれているほど、情報量が多いと判断します。 -- ''3. 集中性 (Concentration)'': 特定の短期間に不自然な高評価レビューが集中していないかを検出します。株価分析で使われるMACDという時系列分析の手法を応用し、レビュー投稿の「急騰」を検知して、その期間のレビューの信頼性を調整します。 - ''関連コード (Recommend.py)'' #code(python){{ def Credibility(S_score_norm, I_score_norm, C_score_norm, HPnumber, df): """類似度・情報量・集中性の3つのスコアから最終的な信頼度を計算する""" F_score = [] # ... (対象教材のレビューを取得) ... # 3つのスコアを平均して、総合的な信頼性指標F_scoreを算出 for i in range(len(index)): F_score.append((S_score_norm[index[i]] + I_score_norm[index[i]] + C_score_norm[index[i]]) / 3) # ... (最終的なスコアを計算) ... return F_cre_score, Ave_score # レビュー投稿時に呼び出されるメイン処理 def _process_review(...): # ... (レビューをファイルに保存) ... # 信頼度計算に必要な各スコアを算出 all_reviews_df = _read_csv_with_fallback(review_filepath) S_score_norm = Similarity(all_reviews_df) I_score_norm = Informative(all_reviews_df) C_score_norm = Concentration(all_reviews_df) # 信頼度スコアを計算 Credibility_score, Ave_score = credibility_func(...) # 最終的な評価値をマスターファイルに保存 df_master.at[item_original_index, '評価'] = final_score df_master.to_csv(filepath, index=False, encoding='utf-8-sig') }} --- ** 学生向け機能 [#bc31bb50] 学生としてシステムを利用する際の操作手順です。 *** ログイン・ログアウト [#e6ec0d60] 登録済みのアカウントでシステムにアクセスします。 - ''操作手順 (ログイン)'' -- 1. トップページ (''/top'') にアクセスします。 ~&ref(top.png,nolink,800x); -- 2. ''学籍番号'' と ''パスワード'' を入力し、「ログイン」ボタンをクリックします。 -- 3. 認証が成功すると、メインページ (''/index'') へ遷移します。 ~&ref(index.png,nolink,800x); - ''操作手順 (ログアウト)'' -- 1. ページ上部にある「ログアウト」ボタンをクリックします。 -- 2. セッションが破棄され、トップページ (''/top'') へ遷移します。 *** 履修状況確認と科目推薦 (メインページ) [#qe2cc390] ログイン後に表示されるメインページで、自身の履修状況や推薦科目を確認します。 - ''画面説明 (''/index'')'' ~&ref(index.png,nolink,800x); -- ''履修状況'': 自身のこれまでの履修科目と成績評価(◎, ▲, △, 〇, ✕)が表形式で表示されます。 -- ''推薦科目'': 以下のロジックに基づいて推薦された科目がリスト表示されます。 --- ''協調フィルタリング'': 履修傾向が類似する他の学生のデータから、未履修で評価が高いと予測される科目を推薦します。 --- ''卒業要件'': 卒業に必要な単位が不足している区分がある場合、その区分の科目を優先的に推薦します。 ~&ref(cmd_index.png,nolink,800x); -- 各推薦科目のリンクをクリックすると、後述の ''科目トップページ'' (''/kamoku/<科目名>'') へ遷移します。 *** キャリアベースの科目推薦 [#o21d15f0] 希望する進路(業種)に基づいて、履修すべき科目の推薦を受けます。 - ''操作手順'' -- 1. メインページなどから「キャリア推薦」ページ (''/career'') へ移動します。 ~&ref(career.png,nolink,800x); -- 2. プルダウンメニューから、興味のある ''業種'' を選択します。 ~&ref(career_pull.png,nolink,800x); -- 3. 「推薦を表示」などのボタンをクリックします。 -- 4. 過去のキャリアデータから学習を開始、利用者の履修済み科目を除いた推薦科目がリスト化されます。 ~&ref(cmd_career.png,nolink,800x); -- 5. ページ内に、推薦された科目がリストとして表示されます。 ~&ref(career_list.png,nolink,800x); ** 教員向け機能 (シラバス作成) [#t03b9ed0] 教員が担当科目のシラバスを作成し、システムに登録する手順です。 *** 1. シラバス情報入力 [#bd3fb1ef] - ''操作手順'' -- 1. トップページ (''/top'') にアクセスします。 ~&ref(top_teacher.png,nolink,800x); -- 2. 教員を選択した状態で''教員ID'' と ''パスワード'' を入力し、「ログイン」ボタンをクリックします。 -- 3. 認証が成功すると、シラバス作成ページ (''/subject'') へ遷移します。 ~&ref(subject.png,nolink,800x); -- 4. 担当科目選択ページ (''/subject'') で、自分が作成したい ''授業タイトル'' を選択します。 ~&ref(subject_select.png,nolink,800x); -- 5. シラバスに必要な各種項目(英語科目名、科目区分、授業概要、到達目標、授業計画、キーワードなど)を入力します。 -- 6. 全ての入力が終わったら、「作成」や「プレビュー」ボタンをクリックします。 *** 2. プレビューと保存 [#uc864b63] - ''操作手順'' -- 1. シラバスプレビューページ (''/result'') に、入力内容が整形された形で表示されます。内容を確認します。 ~&ref(result.png,nolink,800x); -- 2. 内容に問題がなければ、「保存」ボタンをクリックします。 --3. シラバス全体がHTMLファイルとしてサーバーに保存され、処理完了後は最初の教員選択ページ (''/teacher'') に戻ります。 --- ''保存先'': ''app/templates/<科目URL名>/<科目URL名>_Custom.html''(シラバス画面) --- ''保存先'': ''app/templates/<科目URL名>/<科目URL名>_Custom.csv''(キーワード) ~&ref(cmd_result.png,nolink,800x); ** 汎用科目ページ機能 [#ff99ae2a] 学生が推薦された科目や履修中の科目について、詳細情報を確認する機能です。 *** 科目トップページ [#n6ba88d5] 各科目のポータルとなるページです。 - ''アクセス方法'' -- メインページ (''/index'') の推薦科目リストから科目名をクリックします。 ~&ref(index.png,nolink,800x); - ''画面説明 (''/kamoku/<科目名>'')'' ~&ref(kamoku.png,nolink,800x); -- ''講義一覧'': 第1回から第15回までの講義内容へのリンクがリスト表示されます。 -- ''シラバス表示'': 教員によってカスタムシラバスが作成されている場合、それを表示するリンクが表示されます。 *** 各回講義ページとレビュー投稿 [#t613dd41] - ''操作手順'' -- 1. 科目トップページから、閲覧したい回の講義リンクをクリックすると、講義詳細ページ (''/kamoku/<科目名>/lecture/<回数>'') へ遷移します。 -- 2. ページには、その回の ''講義タイトル'' や、参考となる ''Webサイト教材''・''動画教材'' が表示されます。 ~&ref(kyouzai.png,nolink,800x); -- 3. 各教材の下にあるフォームから、5段階評価とコメントを入力して「投稿」ボタンをクリックすることで、教材のレビューができます (''/kamoku/.../review'')。 ~&ref(kyouzai_score.png,nolink,800x); -- 4. レビューを投稿すると、教材の信頼度スコアが再計算され、教材リストの表示順に反映されることがあります。 ~&ref(kyouzai_result.png,nolink,800x); ** 管理者向け機能 [#j1649cee] システムのデータベースを直接管理するための機能です。アクセスは管理者のみに制限されている想定です。 *** 管理トップページ [#oaf284c2] - ''アクセス方法'': URL ''/admin'' を直接入力します。 ~&ref(url_admin.png,nolink,800x); - ''画面説明'' ~&ref(admin.png,nolink,800x); -- ''テーブル一覧'': ''StudentData.db'' 内の全テーブル名がリスト表示されます。各テーブル名をクリックすると、''テーブル閲覧ページ'' に遷移します。 -- ''CSVアップロード'': CSVファイルを選択し、データを格納したいテーブル名を指定して、データベースにデータを一括追加できます。 ~&ref(table_add.png,nolink,800x); -- ''テーブル削除'': テーブル名を指定して、データベースからテーブルを完全に削除できます。 ~&ref(table_delete.png,nolink,800x); *** テーブル閲覧・編集・削除 [#va0d6c1a] - ''操作手順'' ~&ref(table.png,nolink,800x); -- 1. 管理トップページ (''/admin'') でテーブル名をクリックすると、そのテーブルの内容が一覧表示されます (''/admin/table/<テーブル名>'')。 -- 2. 各行の右側にある ''「編集」'' ボタンをクリックすると、行データ編集ページ (''/admin/table/.../edit/<行ID>'') に遷移し、フォームでデータを更新できます。 ~&ref(edit.png,nolink,800x); -- 3. 各行の右側にある ''「削除」'' ボタンをクリックすると、その行のデータが削除されます (''/admin/table/.../delete/<行ID>'')。 -- 4. 編集・削除処理後は、元のテーブル閲覧ページにリダイレクトされます。 *数値実験1:協調フィルタリングによる科目推薦の動作検証 [#iedd3c3c] **目的 [#bcf9e4e6] -本システムにベース機能として実装されている、一般的な協調フィルタリングによる科目推薦が、どの程度の精度を持つかを定量的に評価し、現状の性能を把握する。~ ~ **準備 [#j559bdb1] プログラムは iie.lab.tpu.2526のドライブより 学生/25_o4山本/プログラム/test1.zip にて保存(2025/07/08更新) |扱うデータ|用途|ファイル名|ファイルの場所| |実験用ファイル| | | | |計算モジュール|科目推薦の計算関数群|Recommend.py|test1/| |実験用データ|学生の成績データ|grades.csv|test1/| |実験実行ファイル|実験の実行と結果のグラフ化|experiment1_kamoku_suisen.py|test1/| |実験実行ファイル|データ生成|generate_dataset.py|test1/| |実験結果|データ数と精度の関係を示すグラフ|accuracy_comparison_graph.png|test1/| ~ **実験内容 [#d93e47c5] -ホールドアウト法を用いる。~ 各学生の履修履歴の20%を「正解データ」として隠し、残りの80%から推薦を生成。学生数を段階的に増やしながら、推薦リストに「正解データ」がどれだけ含まれるかを適合率 (Precision) と再現率 (Recall) で評価する。~ ~ **実験手順 [#k7938f51] **実験結果 [#j6e9fb4b] #ref(数値実験_実験手順_004.png,nolink,800x); #ref(accuracy_comparison_graph.png,nolink,800x); -グラフから、学習データの学生数が増えるにつれて精度が安定するものの、約20%で頭打ちになる傾向が見られた。~ **考察 [#lb203ba7] ~ ~ ~ *数値実験2:レビュー信頼度スコアの有効性検証 [#w89cd5f1] **目的 [#s279e405] -教材の質を測る上で、単純な平均評価点だけでなく、レビュー内容の質も考慮する信頼度スコアが、意図通りに機能するかを検証する。~ ~ **準備 [#i9ed2952] プログラムは iie.lab.tpu.2526のドライブより 学生/25_o4山本/プログラム/test2.zip にて保存(2025/07/01更新) |扱うデータ|用途|ファイル名|ファイルの場所| |実験用ファイル| | | | |計算モジュール|レビュー信頼度の計算関数群|Recommend.py|test2/| |実験用データ|教材のマスターデータ|materials.csv|test2/| |実験用データ|教材へのレビューデータ|reviews.csv|test2/| |実験実行ファイル|実験の実行と結果の要約・グラフ化|experiment2_kyouzai_shinraido.py|test2/| |実験結果|「平均評価」と「最終信頼度スコア」の比較グラフ|report_graph.png|test2/| ~ **実験内容 [#pc46e999] -「コピーレビュー」や「短文レビュー」といった、意図的に質の低いレビューを含むデータセットを用意する。~ -各レビューに類似度(S)・情報量(I)・集中度(C)の3つの観点でペナルティを計算し、元の評価点に適用。最終的な「信頼度スコア」を算出する。~ -質の低いレビューが投稿された教材の信頼度スコアが、元の平均評価から妥当な形で引き下げられているかを確認する。~ ~ **実験手順 [#y216e87f] **実験結果 [#t2199a54] &ref(数値実験_実験手順_006.png,nolink,800x); &ref(report_graph.png,nolink,800x); -類似度スコアと情報量スコアは、それぞれコピーレビューと短文レビューを正しく検出し、該当教材のスコアを効果的に引き下げることを確認した。~ただし、集中度スコアの計算ロジックはうまく起動していないことがわかる。 ~ **考察 [#udcc29bc] ~ ~ ~ *数値実験3: [#z93e971c] **目的 [#p490da6b] -本研究で主軸として提案する、機械学習を用いたキャリアパス推薦が、卒業生の就職先データから「特定の業種と関連の強いキー科目」を正しく抽出できるかを検証する。&br; **準備 [#fcb504c6] プログラムは iie.lab.tpu.2526のドライブより 学生/25_o4山本/プログラム/test3.zip にて保存(2025/07/08更新) |扱うデータ|用途|ファイル名|ファイルの場所| |実験用ファイル| | | | |計算モジュール|キャリアパス推薦の計算ロジック|career_recommender.py|test3/| |データ生成|実験用の大規模なダミーデータを生成|create_test_dataset.py|test3/| |就職先データ|生成された卒業生の就職先リスト|employment_data.csv|test3/| |履修状況データ|全学生の履修状況の0/1行列|all_grades_matrix.csv|test3/| ~ **実験内容 [#k78c60bf] -「IT業界に進む学生はネットワーク関連科目を履修しがち」のような、意図的な相関関係を持つ、大規模なダミーデータを生成。~ -L1正則化ロジスティック回帰モデルを使用。全卒業生の「履修科目パターン」と「就職業種」を学習させ、各科目が特定の業種への就職に与える影響度を「重要度スコア」として算出する。~ -モデルが算出した「重要度スコア」が、データに仕込んだ傾向と一致しているかを確認する。~ **実験手順 [#e63483c0] **実験結果 [#ydc86d74] #ref(test3データ生成.png,nolink,800x); #ref(test3科目推薦.png,nolink,800x); **考察 [#g1455153] *その他 [#td0f2a65] **その他 [#sbb67277]
テキスト整形のルールを表示する