# SNS の投稿内容に基づく生活習慣病発症リスクの分析

田㴊 尚道 松本和幸吉田稔 西村良太 北研二
徳島大学大学院創成科学研究科
c612135001@tokushima-u.ac.jp, \{matumoto, mino, kita, nishimura\}@is.tokushima-u.ac.jp

## 概要

国内における死亡原因は，がん・循環器疾患・糖尿病などで全体の約 6 割を占めている.これらの病気はいずれも食事・運動・睡眠などの生活習慣と深 い関りがあり, 生活習慣病と呼ばれている. 生活習慣病には自覚症状がほとんどないため, 病気の悪化 に気づきにくいという特徴がある。本研究では，よ り簡易的に生活習慣病を予防するシステムの構築を 目指し，ソーシャル・ネットワーキング・サービス (SNS)を用いて, ユーザの投稿内容から食事・運動・体調・精神状態に関するツイートの分析を行った.調查の結果, 本研究の成果がユーザの投稿内容から 生活習慣病発症の危険因子を検出するシステムの構築につながることが分かった。

## 1 はじめに

生活習慣病は国内における，死亡者数の約 6 割を 占めている[1]. 生活習慣病の予防は私たちの健康を 守るために非常に重要であるが，生活習慣病の早期発見は難しい。生活習慣病にはほとんど自覚症状が なく, 気づいた時には病気が悪化しているケースが 少なくない。本研究では, 定期的に生活習慣を見直 すきっかけを与えるシステムが必要であると考え，多くの人が自身の日常生活について投稿している SNS に注目する。本論文では, 年々ユーザが増加傾向にある Twitter[2]を対象とし，ユーザの投稿内容か ら食事，運動，体調，精神状態に関するツイートの 分析を行い, ユーザの特徴, ユーザ間の共通点の分析手法について述べる. これらの分析結果から, ユ 一ザの投稿内容から生活習慣病発症の危険因子を検出するシステムの構築について考察する.

## 2 関連研究

高橋ら[3]は，ユーザの生活パターンと介入が受け 入れられる可能性を考慮して環境のモデルを推定し，後ろ向き帰納法アルゴリズムで目標から逆算して最適な方策を得る方法を構築している. 彼らの研究で は，ユーザの生活パターンへの介入をユーザ自身が記録したカレンダーアプリの生活記録データを分析 することで行う.そのため, 介入を受けるためには， ユーザが毎日の生活を記録する必要がある。また，彼らのシステムは，ある程度生活習慣の改善が必要 であることを自覚しているユーザには有効であるが, ユーザへの負担が大きいため, ユーザ数は限られる.本研究では，生活習慣を改善する必要性に気づいて いないユーザを対象として生活習慣改善のきっかけ を与えるシステムを目指している点で異なる。

Gael Pérez Rodríguezt ら[4]は, Twitterの糖尿病コ ミュニティの患者や近親者の健康状態を理解するた めに，糖尿病患者の投稿内容に焦点を当てた分析を 行っている. Twitter の投稿内容からユーザの健康状態の分析を行う点では, 本研究は彼らの研究と類似 している。彼らは糖尿病に罹っているユーザのみを 分析対象としているが，本研究は分析対象とするユ ーザを限定しない点で異なる。

## 3 提案手法

提案手法は, まず，半年間で健康状態（体調・精神状態）と生活習慣（食事・運動）のそれぞれ 1 項目以上を含むツイートを定期的に行っているユーザ を選定し，半年分のツイートを収集する。これらの 情報の収集には Twitter API [5]を使用する。

収集したツイートに対して，自動および手動でラ ベル付けを行う．自動ラベル付けではラベル別にキ ーワードを設定し，キーワードが含まれるツイート に対してラベルを自動付与する。手動ラベル付けで は，自動ラベル付けでラベルが付与されなかったツ イートを対象に，各ユーザからランダムでツイート を抽出し，手動ラベル付け用のデータを作成し，手作業によるラベル付けを行う．モデル作成のために ラベル付けしたデータのテキストに対して, BERT (Bidirectional Encoder Representations from Transformers)[6]を用いてツイート単位でテキストを ベクトル化した。これを用いてマルチラベル分類モ デルの作成と評価を行った。最後に，作成したモデ ルを用いて，収集した全データにラベルを付与し， データ分析を行う。

## 3. 1 Twitter API

Twitter API を利用することで，公式サイトを介さ ずに, ツイートやタイムラインなどのデータを取得 することができる. キーワードや期間を指定してツ イートを収集することが可能であり，分析に必要な ツイートを効率的に収集することができるため, 本研究では Twitter APIを用いてデータ収集を行う.

## 3.2 ラベル付きデータ作成

ラベルの種類はその他(0), 運動(1), 食事(2),体調(3), 精神状態(4)の 5 種類とした. 自動ラベル 付けでは, 表 1 に示すように各ラベルのキーワード を設定する. キーワードが含まれたツイートには各 キーワードに対応するラベルを付与した。その他 $(0)$ と精神状態(4)のツイートはキーワードの設定が困難であるため, 自動ラベル付けは行わない.

手作業によるラベル付けでは自動ラベル付けでラ ベルが付与されなかったツイートを対象に, 各ユー ザからランダムで一定数のツイートを抽出し, 得ら れたデータを手作業ラベル付け用のデータとする. ラベル付与の偏りを抑えるために, 同じデー夕に対 して 4 人の作業者が付与を行い, 最終的なラベルは 多数決で決定する. 多数決で決定できない場合は,複数のクラスに属するツイートとして扱う。

表 1 ラベルの種類とキーワード

 \\

## 3.3 テキストのベクトル化

東北大学乾研究室が公開している BERTの事前学習済みのモデル[7]を用いて, ツイートの分散表現ベ クトルを取得する.このモデルは日本語の Wikipedia 記事を対象に事前学習したものであり, 得られる分散表現ベクトルの次元数は 768 次元である.

## 3.4 モデル作成と評価

モデルの作成は BERT モデルをサポートしている
Simple Transformers[8]用いた. Simple Transformers は Transformer モデルが,シンプルな実装で使えるラ イブラリである. 今回のモデルの構造は BERT の出力次元がラベルの種類数である 5 になるように最終層だけ全結合層に取り換えたものである。また，モ デルの評価には 5 分割交差検証法を用いる.

## 3.5 データ分析

データ分析では，まずデータ分析の対象ユーザを 抽出した. ラベル $(0)$ のツイートは特徴を把握するこ とが難しいため分析対象外とする。データ分析の対象ユーザを 1 日当たり 10 件以上のツイート, 且つ, その 10 件以上のツイート内に複数のラベルがある ユーザとした.これは 1 日当たりのラベル出現割合 のパターンでユーザを比較するためである.

分析対象のユーザを抽出後, ユーザごとに 1 日当 たりのラベルの出現割合を出し, K-Means 法[9]によ り出現割合のパターンで適当なクラス数にユーザを 分類し, 各クラス内の単語の出現傾向を調べる. 分類したクラス内の単語傾向を調べる手法はトピック モデルを用いる. トピックモデルの学習は LDA(Latent Dirichlet Allocation)[10]により行う.

## 4 結果と考察

## 4. 1 データ収集

Twitter API を用いて 3節で述べた条件に当てはま るユーザの選定を行う。まず，食事・運動のキーワ ードを設定し, 食事・運動関連のツイートをしてい るユーザを特定し，過去に体調・精神状態に関する ツイートを投稿したユーザの特定を行う．表 2 が収集時のキーワードの例である. 最後に，特定したユ 一ザの中で bot の可能性があるユーザ，鍵付きアカ ウントのユーザ，半年以内に作られたユーザを除外 することで，収集対象のユーザを決定する。 ユーザ を選定した後，各ユーザの半年間分のツイートを収集したところ, ユーザ数は 5297 名となり, 収集でき たツイート数は約 276 万件となった。

表 2 ツイート収集時のキーワード

 \\

## 4. 2 ラベル付きデータ

ラベル付きデータの作成は，自動ラベル付けと手動ラベル付けで行った. 自動ラベル付けでは運動,食事，体調の 3 つの項目に対してキーワードを設定 し，キーワードを含むツイートには自動でラベル付 けを行った。手動ラベル付けでは自動ラベル付けで ラベルが付与されなかったツイートを対象に，各ユ 一ザから 2 件のツイートを抽出し，得られた 10,594 件のツイートを手作業ラベル付け用のデータとした。 ラベル付与の偏りを抑えるために，同じデータに対 して 4 人でラベル付けを行い，最終的なラベルは多数決で決めた。ラベル割合が 1:1 に分かれる場合は 重複して学習させ，1:1:1:1に分かれる場合は除外し た. ラベル付けの結果は表 3 のようになった.

表 3 ラベル付け結果

## 4. 3 モデル作成と評価

モデルに学習させるラベル付きデータは自動ラベ ル付けデータを各項目ランダムに 700 件抽出したデ ータと手動ラベルデータで構成されている(表 4).

モデルの作成では Simple Transformers を用いて マルチクラス分類モデルの作成をした. モデルの評価は Python の機械学習用ライブラリである scikit-learn [11]を用いた交差検証法で行った.今回は 5 分割の交差検証を行った。また, 学習データのク ラスに偏りがあるため，学習の際にアンダーサンプ リング，オーバーサンプリングの処理を加えた。ア ンダーサンプリング処理を加えたモデルの分類精度 は $77 \%$ ，オーバーサンプリング処理を加えたモデル は分類精度が $87 \%$ となった。今回，分類精度が高か ったオーバーサンプリング処理を加えたモデルを分析に用いることにした。

表 4 学習データの内訳

## 4. 4 分析結果

データ分析の対象ユーザを 1 日当たり 10 件以上の

ツイート，かつ，その 10 件以上のツイート内に(0) ラベルを除く複数のラベルがあるユーザとする。そ の結果，対象ユーザは 64 名となった. 各ユーザに対 して，1 日当たりの各ラベルの出現割合を求める.各ラベルの出現割合は以下の式(1)で算出した.

$
\begin{aligned}
& R_{i}=100 \times \frac{L_{i}}{L_{s}} \\
& R_{i}: \text { ラベル } \mathrm{i} の \text { 出現割合 } \\
& L_{i}: \text { ラベル } \mathrm{i} の \text { 出現回数 } \\
& L_{s}: \text { 全ラベルの出現回数の合計 }
\end{aligned}
$

ユーザのクラス分類では K-Means 法を用いて，ラ ベルの出現割合のパターンでユーザを 5 つのクラス に分類した。クラス名はクラス内での出現割合の高 いラベルから参照し， A:[運動・食事]，B:[食事・精神状態], C:[食事], D:[体調], $\mathrm{E}$ : [精神状態]とした.

各クラスに対し, トピック数を 30 とし, 名詞, 形容詞のみを対象にトピックモデル (LDA) と pyLDAvis[12]を用いてトピック内の単語傾向やトピ ック間の共通点を調査した. pyLDAvis の散布図にお いて，円の中心に配置されている数字は各トピック の番号を表し，円の大きさは，分析対象としている 単語が各トピックにどの程度含まれているかを表す。 また，円の中心間の距離はトピック間の距離を表し ている。棒グラフは各トピック内の出現頻度の高い 上位 30 語と各単語の出現数を示す. 図 1 はクラス B の「眠い」の出現分布を表している。図 2 は図 1 の トピック 26 内の上位単語を表している. 棒グラフの 赤色部はトピック 26 内での各単語の単語数を示し,青色部は全体の単語数を示している。また，各クラ ス内の上位頻出単語 5 語を表 5 にまとめた。

図 1 pyLDAvisによるトピックモデルの可視化

図 2 pyLDAvisによる単語の出現頻度の可視化

表 5 各クラス内の上位頻出単語

 \\

## 4. 5 考察

pyLDAvis によるトピックモデルの可視化結果に 基づき，クラスごとに考察を行う．クラス A では，「ダイエット」が全トピック，「糖質制限」が 16 トピック，「良い」が 26 トピックに分布していた. ダイエット目的でのトレーニングや食事制限関連の 単語が多く, 健康意識が高いユーザが多いと考えら れる。クラス B では, 図 1 , 図 2 から分かるように 「眠い」が 14 トピック，その他には「怖い」が 9 トピック, 「愚痴」が 10 トピックに分布していた. クラス B は A, C, E と比べ，ネガティブな単語の 分布が広いことから生活習慣に何らかの問題を抱え ているユーザが多いと考えられる。クラス Cでは上位頻出単語以外に「アップ」が 12 トピック，「良い」 が 26 トピック，「楽しい」が 18 トピックに分布し ていた. ポジティブな単語の分布が多く, 食事を中心とした健康意識の高いユーザが多いと考えられる。 クラス Dでは「下剂」「悪い」が 29 トピック，「痛 い」が 28 トピックに分布していた. その他にも「無理」「腹痛」などのネガティブな単語が広く分布し,他のクラスと比較し, 顕著にネガティブな単語が広 く分布していた。さらに「お菓子」「アイス」「ラ 一メン」といった食生活に悪影響を及ぼす可能性の ある単語も確認できた。これらを考慮すると, クラ ス D内のユーザは食生活の乱れから体調不良を起こ している可能性があり, 生活習慣病のリスクが最も 高いユーザが多く含まれると考えられる。クラス E では，「嬉しい」が 23 トピック，「最高」が 20 卜 ピックに分布し, ポジティブな単語が広く分布して いる一方で，「嫌」が 15 トピック，「怖い」が 10 トピック，その他にも「メンタル」「我慢」「必死」
といったネガティブな単語も広く分布していた。ま た，他のクラスには無かった「仕事」が 17 トピック に分布している点も特徵的であった．以上を考慮す ると，仕事などのストレスによって今後生活習慣病 を発症する可能性のあるユーザが多いと考えられる。 これらの考察から5つのクラスを生活習慣病発症少 スクの観点から比較すると、 $[\mathrm{A} \cdot \mathrm{C}]<[\mathrm{E}]<[\mathrm{B}]<[\mathrm{D}]$ の 順で生活習慣病発症リスクは高くなるのではないか と考えられる。

## 5 おわりに

本研究では，Twitterを対象として，ユーザの投稿内容から食事，運動，体調，精神状態に関するツィ 一トの分析を行い, ユーザの特徴やユーザ間の共通点の調查を行った。

その結果，ユーザをトピックモデルによって適当 なクラスに分類することで，クラスごとのユーザの 特徴を把握することが可能であることが分かった. また, 生活習慣病発症のリスクという観点から結果 を考察することによって，各クラスの生活習慣病リ スクの比較を行うことが可能であった。この結果は 生活習慣病発症の危険因子を検出するシステムの構築へつながると考えられる。

今後の課題として, ツイート収集時やラベル付与時のキーワードの見直しと分類モデルの精度向上を 行う。また，体調の変化を表す語とネガティブやポ ジティブワードの共起頻度や生活習慣病を発症する リスク表現をあらかじめ決定しておき，そのような 表現がユーザごとにどのように表れているのかにつ いての調査を行う。

## 謝辞

本研究は公益財団法人 JKA 令和 3 年度複数年研究補助事業により実施されました. 深く謝意を表します.

## 参考文献

[1] 生活習慣病を知万う!(引用日:202 年 12 月 24 日) https://www.smartlife.mhlw.go.jp/event/disease/

[2]【2021 年 12 月版】人気ソーシャルメディアのユー ザ数まとめ (引用日:2021 年 12 月 24 日)https://www.comnico.jp/we-love-social/sns-users

[3] 高橋公海, 辛島匡宏, 倉島健, 戸田浩之: 強化学習 を用いた健康行動促進における介入戦略の学習，第 12 回データ工学と情報マネジメントに関するフォー ラム, 2020 年 3 月 2 日, I2-3, day1 p59

[4] Mining the sociome for Health Informatics: Analysis of therapeutic lifestyle adherence of diabetic patients in Twitter, Gael Pérez Rodríguez, Martín Pérez Pérez, Florentino Fdez-Riverola, Anália Maria Garcia Lourenço, Future Generation Computer Systems, Volume110, September 2020, Pages214-232

[5] Twitter API https://developer.twitter.com/en/docs/twitter-api

[6] BERT: Pre-training of Deep Bidirectional Transformers for Language, Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova, Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Vol.1, pp.4171-4186, 2019.

[7] BERT 日本語学習済みモデル 東北大学 乾・鈴木研究室 https://github.com/cl-tohoku/bert-japanese

[8] Simple Transformers: https://simpletransformers.ai/

[9] sklearn.cluster.KMeans:

https://scikit-learn.org/stable/modules/generated/sklearn.c luster.KMeans.html

[10] models.ldamodel-Latent Dirichlet Allocation-gensim: https://radimrehurek.com/gensim/models/ldamodel.html

[11] scikit-learn: https://scikit-learn.org/stable/

[12] pyLDAvis: https://github.com/bmabey/pyLDAvis
 田㴊 尚道 松本和幸吉田稔 西村良太 北研二 徳島大学大学院創成科学研究科 c612135001@tokushima-u.ac.jp, \{matumoto, mino, kita, nishimura\}@is.tokushima-u.ac.jp  