3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

人間関係の偏りには“避けられないノイズ”があるのかも ── 262法則をPythonで検証してみた

Last updated at Posted at 2025-11-30

はじめに

人は誰しも、「できれば多くの人から好かれたい」と望むものです。しかし現実には、誰もが同じように好かれるわけではなく、好意・無関心・嫌悪といった感情の偏りが生じます。

この傾向を説明する概念として「262の法則」があります。これは、

  • 2割の人には好かれ、
  • 6割の人には特に意識されず、
  • 2割の人からは嫌われる、

という比率で人間関係が分布しやすい、という考え方です。

ここで、一緒に考えてみたいのが次の問題です。

もし人間的要素のない完全ランダムな評価にしたとしても、
それでも262のような比率になるのか、
あるいはその中でも強い偏りが生まれるのか?

この問いを検証するために、人間関係を完全にランダムな評価として扱うモデルを構築し、Pythonによるシミュレーションを行いました。

実装コードは Google Colab こちら からも閲覧できます。

モデル設定

10人の集団を想定し、それぞれの人物が他の9人を次の割合で評価するとします。

  • 20% に対して「好き(+1)」
  • 20% に対して「嫌い(−1)」
  • 残り 60% は「関心なし(0)」

ここでポイントとなるのは、本モデルにおける評価者たちは

  • 性格を知らず、
  • 過去の関係を持たず、
  • 相性を考えず、
  • 人間性を加味せず、

完全な乱数生成機械として振る舞うという点です。

実際のシミュレーション結果

10人の集団に対し、上記設定で 1000 回のランダム試行を行いました。

コードはこちら
import numpy as np
import matplotlib.pyplot as plt

# =====================================
# Parameters (パラメータ設定)
# =====================================
np.random.seed(0)     # <-- 乱数シードを固定(再現性の確保)
N = 10                # 人数
trials = 1000         # モンテカルロ試行回数

p_like = 0.2
p_dislike = 0.2
n_like = int(N * p_like)
n_dislike = int(N * p_dislike)

max_scores = []
min_scores = []

# すべての試行でのスコアを保存
all_scores = []

for _ in range(trials):
    like  = np.zeros(N)
    dislike = np.zeros(N)

    for voter in range(N):
        others = [i for i in range(N) if i != voter]

        liked   = np.random.choice(others, size=n_like, replace=False)
        remaining = [i for i in others if i not in liked]
        disliked = np.random.choice(remaining, size=n_dislike, replace=False)

        like[liked] += 1
        dislike[disliked] += 1

    score = like - dislike  # net evaluation = like − dislike(好意−嫌悪)

    max_scores.append(score.max())
    min_scores.append(score.min())
    all_scores.append(score.copy())

print(f"=== {N}人の集団を{trials}回シミュレーションした場合の人間関係スコア分布の要約 ===")
print(f"最も好かれた人の平均スコア: {np.mean(max_scores):.2f}")
print(f"最も嫌われた人の平均スコア: {np.mean(min_scores):.2f}")
print(f"好かれ・嫌われの幅(平均): {np.mean(np.array(max_scores) - np.array(min_scores)):.2f}")

出力結果は次の通りでした。

=== 10人の集団を1000回シミュレーションした場合の人間関係スコア分布の要約 ===
最も好かれた人の平均スコア: 3.19
最も嫌われた人の平均スコア: -3.19
好かれ・嫌われの幅(平均): 6.39

注目すべきは、

  • 完全ランダムにもかかわらず、

    • 最も好かれる人は平均 +3 程度、
    • 最も嫌われる人は平均 −3 程度、

という偏りが必ず生じるという点です。
差が約 6 となるのは、集団内で十分に目立つ偏りです。

そして重要なのは、
ここに人間の性格や能力は一切影響していない
という事実です。

つまり、この偏りはほぼノイズ的な現象です。

ネットワーク構造による可視化

ここで、先のモデルを用いてある1回分の試行結果をネットワークとして可視化してみます。

コードはこちら
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

# =====================================
# Graph visualization for ONE example trial
# (1試行分のネットワーク可視化)
# =====================================
N = 10                # 人数
np.random.seed(0)     # <-- 乱数シードを固定(再現性の確保)
like  = np.zeros(N)
dislike = np.zeros(N)
edges = []

p_like = 0.2
p_dislike = 0.2
n_like = int(N * p_like)
n_dislike = int(N * p_dislike)

for voter in range(N):
    others = [i for i in range(N) if i != voter]
    liked   = np.random.choice(others, size=n_like, replace=False)
    remaining = [i for i in others if i not in liked]
    disliked = np.random.choice(remaining, size=n_dislike, replace=False)

    like[liked] += 1
    dislike[disliked] += 1

    # 好意 → 赤
    for l in liked:
        edges.append((voter, l, "red"))

    # 嫌悪 → 青
    for d in disliked:
        edges.append((voter, d, "blue"))

score = like - dislike

G = nx.DiGraph()

for i in range(N):
    G.add_node(
        i,
        label=f"score\n{int(score[i])}"
    )

for (a,b,c) in edges:
    G.add_edge(a,b,color=c)

pos = nx.spring_layout(G, seed=0)
plt.figure(figsize=(12,10))

# ノード(人)を描画
nx.draw_networkx_nodes(G, pos, node_size=600, node_color="lightgray")

# エッジ(関係)を矢印つきで描画
for (u,v,c) in edges:
    nx.draw_networkx_edges(
        G,
        pos,
        edgelist=[(u,v)],
        edge_color=c,
        arrows=True,
        arrowstyle='-|>',
        arrowsize=14,
        width=1.2,
        alpha=0.7,
        connectionstyle="arc3,rad=0.2"
    )

# 各ノードに score を表示
node_labels = nx.get_node_attributes(G,'label')
nx.draw_networkx_labels(G,pos,labels=node_labels,font_size=7)

plt.title("Graph representation of preferences\n(red = like, blue = dislike)")
plt.axis('off')
plt.show()

image.png

すると、興味深いことに、

  • 赤矢印(好意)が集まりやすい人物、
  • 青矢印(嫌悪)が集中しやすい人物、

が自然に現れます。

この図を見ると、多くの人はつい意味づけをしてしまいます。

  • 「この人は一緒にいて安心できる人なのかもしれない」
  • 「この人は控えめだけど、よく見ると優しいところがある人なのかもしれない」
  • 「この人は強い個性があって、好き嫌いが分かれやすいタイプなのかもしれない」

しかし、今回のモデルのように実際はただ確率的に偏りが生じただけかもしれません。

262の法則の本質とは

今回の結果から感じるのは、262の法則は

  • 「必ず 2 割から好かれる」
  • 「必ず 2 割から嫌われる」

といった厳密な割合を保証するものではなく、

人間関係が自然と偏りを生みやすい
という傾向を示す考え方だということです。

そして大切なのは、もしあなたが誰かから嫌われることがあったとしても、それが必ずしもあなたの人格や振る舞いに原因があるわけではない、ということです。
ときには、その人間関係の偏りは、集団に内在する偶然的な揺らぎによって生じているだけかもしれません。

つまり、人間関係には“避けられないノイズ”が含まれていて、それがまるで理由があるかのような偏りへと形を変えていくのだと思います。

おわりに

人間関係は多層的で、そこに偶然性と統計的な偏りが重なり合うことで、特定の人に好意や嫌悪が集中することがあります。私たちはそれをつい、その人自身の性格や言動の結果と解釈しがちですが、実際には確率的な揺らぎが大きく関与していることも少なくありません。

今回扱ったモデルは、感情を単純化して +1 / 0 / −1 で表現しましたが、現実の人間関係には、

  • 気まずさゆえの沈黙
  • 言葉にしない好意
  • 伝わりきらない感情
  • 距離を測るための静かな間

といった定量化できない側面がたくさん存在します。

だからもし誰かに好意が届かなかったとしても、それはあなたの魅力が足りなかったからとか、あなたが何か間違えたからではなく、単にその人の中に「好意を受け取る余地」がなかっただけなのかもしれません。
むしろ、そのすれ違いは、関係性に含まれる“ノイズ”が生み出した偶然の配置に過ぎないとも考えられます。

そう考えられるようになると、人との関係に過剰な意味を背負わせすぎず、少し穏やかな視点で眺められるようになるのかもしれません。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?