ナード戦隊データマン

データサイエンスを用いて悪と戦うぞ

心理学的な現象の数理モデル化

感情は一時的かつ特定の事象に結びついているのに対し、気分は感情の集合で継続的かつ特定の事象に結びついていません1。この事実を利用してmatplotlibでプロットしてみます。

仮定

  1. 感情が引き起こると、ネガティブ(マイナス)またはポジティブ(プラス)のどちらかに対応した数値が入力される。
  2. 入力される感情はある一定の確率で入力される。入力がない場合は0が入力される。
  3. 感情は、次の入力(事象)がない場合(0の場合)は一定の率で減衰する。
  4. 気分は、現時点からn回前までの感情の平均で表される。
  5. 感情の入力範囲は-5から5までである。

モデル

コード

from random import random

def completion(y, rate=0.1):
    t = y[0]
    i = 0
    while(t==0):
        yield 0
        i += 1
        t = y[i]
        continue
    c = 0
    for x in y[i:]:
        if x != 0:
            c = x
        else:
            c *= rate
        yield c
        
def diff(y, n=3, alpha=1, beta=0.5):
    s = n
    return y[:s] + [(alpha*sum(y[i-s:i])/n)+beta for i in range(s,len(y))]

def gen_value(size, x_set):
    for i in range(size):
        if i in x_set:
            yield 0
        else:
            yield random()*10-5

if __name__ == "__main__":
    size = 50
    rate = 0.5
    n = int(size/7)
    x_set = [i for i in range(size) if random() > 0.5]
    x = [i for i in range(size)]
    y = list(gen_value(size, x_set))
    z = list(completion(y, rate))
    w = diff(z, n=n, alpha=1)
    v = diff(w, n=n, alpha=1)
    plt.bar(x, y)
    plt.plot(x,z, "r--") #感情モデル
    plt.plot(x,w, "g") #気分モデル
    plt.plot(x,v, "y") #高次の気分モデル

emotion_plot3.GIF

黄: 高次の気分モデル 緑: 気分モデル 赤: 感情モデル 青: 入力されたデータ

感情・気分を表す数理モデル

最初の「仮定」を満たす基で感情・気分を数理モデルに表す際に、データに基づくのか、理論に基づくのか、その両方かによってモデルは変わってきます。

前述のような特殊な仮定に基づいたデータが転がっていないため、理論に基づいたモデルを考えなければなりません。

しかし、理論に基づいたとして、果たしてこれらの数値になにか具体的な意味はあるのか、という点で大きな疑問があります。二次元のグラフ上に、ポジとネガという単純化された感情のみで表現することは、実世界の人間の実際の感情とどのように関係しているのか、そういうデータがほしいところです。

ちなみに、ここで仮定している入力は、例えばEmotion Trackerのような仕組みを用いて、感情の種類・事象・大きさ・日付を入力してもらうような状況を想定します。