91879
以下の百分率を示す、配列が与えられたとします。

```

    test = np.array([1.0, 1.0, 1.0, 0.8571428571428571, 0.7142857142857143, 0.8571428571428571, 0.8571428571428571, 1.0, 1.0, 1.0])*100
    
```

平均値と標準偏差を算出すると以下のような結果になりますが、標準偏差を考慮すると100%を超えてしまいます。これは何がおかしいのでしょうか。

```

    np.mean(test) # 92.857..
    np.std(test)  #  9.58314..
    
```
CC BY-SA 4.0
2022-10-24T13:00:12.887
91793
2022-10-28T21:43:49.153
2022-10-28T21:43:49.153
19110
29111
question
python numpy
計算した平均値に標準偏差を足すと最大値を超えてしまう
標準偏差は平均からその範囲の値の中に全体の68％の値が入る数(データの平均との差の2乗の平均に対して平方根をとるもの)とのことなので、下に引っ張られていても上にも同じように膨らんでしまいます。なので何もおかしくありません。

・参考リンク  
<https://data-viz-lab.com/standarddeviation>
CC BY-SA 4.0
2022-10-24T13:57:22.543
91795
2022-10-25T07:28:27.620
2022-10-25T07:28:27.620
54864
54864
91793
answer
質問された方が提示している形（分かりやすいように昇順に変更）

```

    test = np.array([71, 86, 86, 86, 100, 100, 100, 100, 100, 100])
    # test.mean() + test.std() = 102.52 > 100
    
```

を，数学的に示すのは（私には）難しいですが，

```

    test2 = np.array([86, 86, 86, 86, 100, 100, 100, 100, 100, 100])
    # test2.mean() + test2.std() = 101.26 > 100
    
```

の形なら，数学的に示せそうです。つまり，命題は  
「異なる実数 `a, b (a < b)` のみを含み，それぞれの個数が `k, m (0 < k < m)` 個の集合では `mean + std >
b` となる」  
です。

まず，「平均値が `0` 」の条件を加えて考えます。

```

    a0, b0 (a0 < 0 < b0), k, m (0 < k < m)
    (a0 * k + b0 * m) / (k + m) = 0  ->  a0 * k + b0 * m = 0
    
```

が条件なので

```

    r = -a0 / m = b0 / k (r > 0)
    
```

とおけて， `a0 = -r * m` が `k` 個， `b0 = r * k` が `m` 個と書けます。次に，分散（標準偏差の2乗）を求めると

```

    var = {(a0 - 0)^2 * k + (b0 - 0)^2 * m} / (k + m)
        = {(-r * m - 0)^2 * k + (r * k - 0)^2 * m} / (k + m)
        = r^2 * k * m * (m + k) / (k + m)
        = r^2 * k * m
        > r^2 * k * k  because: m > k > 0, r > 0
        = (r * k)^2
    
```

となります。よって，標準偏差は以下の条件を満たします。

```

    std > r * k = b0
    
```

ところで，この平均値が `0` の集合の全ての要素に同じ任意の実数を加算した集合を考えると，標準偏差は変わらず加算値が平均値となります。従って，この集合では

```

    mean + std > mean + b0 = b
    
```

となり，上記の命題が示されました。
CC BY-SA 4.0
2022-10-28T12:17:24.333
91879
2022-10-28T12:36:55.790
2022-10-28T12:36:55.790
54588
54588
91793
answer