- 技術 💻
サンプリングとは?意味を場面別に|統計・音声・音楽・ログを実測
結論
サンプリング(sampling)とは、全体から決まりに沿って一部を取り出すことです。ふだんの言葉では試供品を配る販促や味見・抜き取り検査を指し、IT・データの世界では、統計の「標本抽出」、音声をデジタルにする「標本化」、ログやトレースを一定の割合だけ残す「間引き」、既存の録音の一部を曲に使う「音楽のサンプリング」を指します。
この記事でわかること
- ふだんの意味と、統計・音声・音楽・ログ・生成AIでの意味の違い(場面別の意味の表)
- 標本の大きさと誤差、7日おきに取ると平均が 982 から 1,303 にずれる偏りを Python で実測した結果
- 自作の音を 8k〜48kHz で取り直し、7kHz の音が 1kHz に化ける折り返しと、ログ・トレースを1%に間引いたときの実測
サンプリングは、分野によって「何から」「何を」取り出すかが変わります。まず、自分が見た場面がどれかを決めると、意味が1つに絞れます。
flowchart LR
A[全体] --> B[一部を<br>取り出す]
B --> C[統計<br>標本抽出]
B --> D[音声<br>標本化]
B --> E[ログ<br>間引き]
B --> F[音楽<br>音の引用]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| サンプリングとは | 全体から決まりに沿って一部を取り出すこと | サンプリングとは(場面別の意味の表) |
| サンプリングの意味(ふだんの言葉) | 試供品の配布(販促)、味見、抜き取り検査 | サンプリングとは(場面別の意味の表) |
| 統計のサンプリング | 母集団から標本を選ぶこと。無作為に選ぶと誤差を計算できる | 統計のサンプリング(標本抽出)とは |
| 標本は何人いればよいか | 誤差は人数の平方根に反比例。1,000人で支持率の誤差はおよそ±3ポイント | 標本の大きさと誤差 |
| サンプリング周波数とは | 1秒間に音の高さを測る回数。44.1kHz なら 44,100 回 | 音声のサンプリング(標本化)とは |
| サンプリング周波数はいくつにする | 残したい音の最も高い周波数の2倍より大きくする | サンプリング周波数で何が変わるか |
| エイリアシング(折り返し)とは | 刻みが粗すぎて、高い音が別の低い音に化ける現象 | エイリアシングの再現と防ぎ方 |
| 音楽のサンプリングとは | 録音の一部を切り出して曲の素材にする手法。他人の録音には権利が関わる | 音楽のサンプリングとサンプラー |
| ログ・トレースのサンプリング | 一部の割合だけ残して量を減らすこと。エラーは全部残す設計にする | ログ・トレースのサンプリング |
確認環境:Ubuntu 24.04.5 LTS の作業用フォルダーで、Python 3.13.18・NumPy 2.5.3・SciPy 1.18.1・pandas 3.0.5、FFmpeg 6.1.1、作業用フォルダーの仮想環境に入れた opentelemetry-sdk 1.45.2 を使いました。統計は乱数で作った10万人分の架空の母集団から標本を1,000回ずつ取り直して誤差を測り、音声は Python と FFmpeg で自分で合成した正弦波・掃引音(だんだん高くなる音)・はじく音だけを使って 8kHz〜96kHz で取り直し、FFT(周波数の分析)で聞こえる周波数とレベルを測っています。他人の音源や著作物は使っていません。ログとトレースは、Python の logging と OpenTelemetry の SDK でメモリの中に記録し、外部には送っていません。OpenTelemetry は環境変数を空にした状態(env -i)で動かしました。権利の説明は文化庁、統計の用語は総務省統計局、各ツールの仕様は公式ドキュメントで確かめました。表計算ソフトの操作は扱っていません。図は mermaid で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「サンプリングとは?意味を場面別に|統計・音声・音楽・ログを実測」
サンプリングとは(場面別の意味の表)
この節では、サンプリングのふだんの意味と、IT・プログラミングでの意味の違いが分かります。
サンプリングは、英語の sample(見本・標本)に -ing が付いた言葉で、「見本を取り出すこと」が元の意味です。国語辞典(デジタル大辞泉など)には「抜き取り検査などのための見本の抽出」「アナログ信号をデジタル信号に変える際の時間ごとの分割」「既存の曲を抜粋して新しい曲を作ること」が並び、マーケティングの用語集には「無料で商品を配り、試してもらう販促」が載っています。
| 場面 | ふだんの意味・IT での意味 | 何から何を取り出すか | 例 |
|---|---|---|---|
| 販促(ふだん) | 試供品を無料で配る | 商品から、試しに使う少量 | 駅前で飲料を配る、通販に試供品を同封 |
| 検査・調査(ふだん) | 抜き取り検査・アンケート | 製品や人の全体から一部 | 1,000個に1個を開けて調べる、世論調査 |
| 統計・データ分析 | 標本抽出 | 母集団から標本 | 10万件の注文から無作為に1,000件を選ぶ |
| 音声・センサー | 標本化(A/D 変換の一段階) | 連続した波から、一定間隔の値 | 1秒に 48,000 回、マイクの電圧を測る |
| 音楽制作 | 録音の一部を素材として使う | 録音から短い音の断片 | ドラムの一打を切り出して鍵盤で鳴らす |
| ログ・トレース | 一定の割合だけ記録する(間引き) | 全リクエストから一部の記録 | トレースを10%だけ保存する |
| 生成AI | 確率に従って次の語を選ぶ | 候補の語から1つ | temperature・top_p で選び方を変える |
| 機械学習のデータ | 件数の偏りをそろえる | 多いクラスを減らす・少ないクラスを増やす | アンダーサンプリング・オーバーサンプリング |
どの場面も「全部は扱えない(扱うと高い・重い・遅い)ので、一部で全体を代表させる」という考え方は同じです。違うのは、取り出し方の決まりと、取り出したことで何が失われるかです。統計では誤差が生まれ、音声では高い音が失われ、ログでは珍しい出来事を見落とします。
1人や物から取り出す
統計・調査・抜き取り検査。取り出した一部から、全体の平均や割合を推し量る。
2時間の流れから取り出す
音声・センサー。連続した波を、一定の間隔で測った数の列に変える。
3出来事の流れから取り出す
ログ・トレース。大量の記録のうち、決めた割合や条件に合うものだけを残す。
sample・sampling・sampler の違い
| 英語 | 日本語 | 指すもの |
|---|---|---|
| sample(サンプル) | 見本・標本・試料・1つの測定値 | 取り出された「もの」。音声では1回分の測定値もサンプルと呼ぶ |
| sampling(サンプリング) | 標本抽出・標本化・試供品配布 | 取り出す「こと・やり方」 |
| sampler(サンプラー) | サンプラー・サンプリングを行うもの | 録音した音を鳴らす楽器、OpenTelemetry の記録するか決める部品 |
| sampling rate(サンプリングレート) | サンプリング周波数・サンプリング率 | 音声では1秒あたりの回数、ログでは残す割合 |
「サンプリングレート」は、音声では「1秒あたり何回測るか(Hz)」、ログやトレースでは「何割を残すか(%)」と、同じ言葉で単位が違います。会話で出てきたら、どちらの意味かを先に確かめます。
統計のサンプリング(標本抽出)とは:母集団と標本
この節では、統計でいうサンプリングの用語(母集団・標本・全数調査・標本誤差)と、なぜ一部だけで全体が分かるのかが分かります。
統計のサンプリングは、調べたい集団全体(母集団)から、一部(標本)を選んで調べることです。全員を調べる「全数調査」(国勢調査など)に対し、一部を調べる方法を「標本調査」と呼びます。総務省統計局の資料は、標本誤差を「母集団の一部の標本を無作為抽出して調査した結果にともなう誤差」と説明しています。
全数調査
母集団の全員・全件を調べる
標本誤差は無い(記入漏れなどの誤差はある)
時間と費用がかかる。壊して調べる検査には使えない
標本調査(サンプリング)
母集団から選んだ一部を調べる
標本誤差がある。無作為なら大きさを計算できる
早く安い。選び方が偏ると、人数を増やしても外れる
なぜ一部で全体が分かるのかというと、無作為に選んだ標本の平均は、母集団の平均のまわりに一定の幅でばらつくことが数学的に分かっているからです。ばらつきの幅(標準誤差)は「母集団の標準偏差 ÷ 標本の大きさの平方根」で見積もれます。次の節で、この式どおりになるかを実際に確かめます。
- 1母集団を決める「どの集団について知りたいか」。例:自社の全利用者、今月の全注文
- 2抽出の枠を用意する選ぶ元になる名簿・一覧。枠から漏れた人は、どう選んでも標本に入らない
- 3選び方と大きさを決める無作為・層化・系統など。許せる誤差から大きさを決める
- 4標本を調べ、誤差つきで報告する「平均 90 分(±1.8 分、1,000 人)」のように、幅と人数を添える
標本の大きさと誤差(Pythonで1,000回取り直した実測)
この節では、標本を10人・100人・1万人と増やしたときに、推定の誤差がどれだけ小さくなるかの実測が分かります。
10万人の架空の母集団(1日の作業時間、平均 89.94 分・標準偏差 30.03 分)から、標本を1,000回取り直し、標本平均のばらつきを測りました。
import numpy as np
rng = np.random.default_rng(183)
pop = rng.gamma(shape=4, scale=15, size=100_000) + 30 # 架空の母集団
mu, sd = pop.mean(), pop.std()
for n in [10, 30, 100, 1000, 10000]:
ms, cover = [], 0
for _ in range(1000):
s = rng.choice(pop, size=n, replace=False) # 無作為に n 人
m, se = s.mean(), s.std(ddof=1) / np.sqrt(n)
ms.append(m)
cover += (m - 1.96 * se <= mu <= m + 1.96 * se) # 95%信頼区間が真の平均を含むか
print(n, np.std(ms), sd / np.sqrt(n), cover / 10)
母集団 N=100000 平均=89.94 標準偏差=30.03
n | 1000回の標本平均のばらつき(実測SE) | 理論 sd/sqrt(n) | 平均からのずれの95%範囲 | 95%信頼区間が真値を含んだ割合
10 | 9.814 | 9.496 | ±18.71 | 88.1%
30 | 5.468 | 5.483 | ±10.54 | 93.6%
100 | 3.015 | 3.003 | ±5.84 | 94.4%
1000 | 0.914 | 0.950 | ±1.84 | 95.2%
10000 | 0.282 | 0.300 | ±0.55 | 96.6%
| 標本の大きさ | 標本平均のばらつき(実測) | 式の値 | 95%の回で収まったずれ |
|---|---|---|---|
| 10人 | 9.81 分 | 9.50 分 | ±18.7 分 |
| 100人 | 3.02 分 | 3.00 分 | ±5.8 分 |
| 1,000人 | 0.91 分 | 0.95 分 | ±1.8 分 |
| 10,000人 | 0.28 分 | 0.30 分 | ±0.55 分 |
- 誤差は人数の平方根に反比例しました。100人→1万人と100倍に増やして、誤差は約10分の1(3.02→0.28)です。誤差を半分にするには、人数を4倍にします。
- 10人では「95%信頼区間」が真の平均を含んだのは 88.1% でした。母集団の分布が右に裾を引いた形なので、標本が小さいと式の前提(平均が正規分布に近づく)が崩れます。30人で 93.6%、100人以上でほぼ 95% になりました。
- 1万人(母集団の1割)では、ばらつきが式より小さく出ました。同じ人を2回選ばない抽出で母集団の1割を取ると、有限母集団修正(√(1−n/N)、ここでは約0.95)の分だけ誤差が小さくなります。
世論調査の「1,000人で誤差±3ポイント」を確かめる
真の支持率を 40% とし、n 人に聞く調査を1万回くり返して、推定値の 95% が収まる範囲を測りました。
支持率 n=100: 95%の推定が 31.0%〜50.0% 理論±9.6pt
支持率 n=400: 95%の推定が 35.2%〜44.8% 理論±4.8pt
支持率 n=1000: 95%の推定が 37.0%〜43.0% 理論±3.0pt
支持率 n=2500: 95%の推定が 38.0%〜41.9% 理論±1.9pt
100人の調査では、真の値が 40% でも「31%」や「50%」と出ることがありました。2つの調査で支持率が 3 ポイント違っても、1,000人規模なら誤差の範囲に収まることがある、と読めます。この誤差は無作為に選んだときだけ成り立つもので、選び方の偏りは含みません(次の節)。
誤差の幅と「差があると言えるか」の考え方は、関連記事「p値とは|意味・有意水準・よくある誤解をPythonで実演」で扱っています。
サンプリング方法の種類と偏り(無作為・系統・層化を実測)
この節では、統計のサンプリング方法の種類と、選び方の偏りが人数を増やしても消えない様子が分かります。
| 方法 | 選び方 | 向く場面 | 注意点 |
|---|---|---|---|
| 単純無作為抽出 | 全員から、同じ確率でランダムに選ぶ | 名簿が全部そろっているとき | 少数のグループが標本に入らないことがある |
| 系統抽出(等間隔抽出) | 最初だけランダムに選び、以後 k 番目ごと | 並んだ名簿・時系列から手早く選ぶ | データに周期があると大きく外れる |
| 層化抽出 | 性別・地域・曜日などの層に分け、層ごとに選ぶ | 層によって値が大きく違うとき | 層ごとの人数の比を集計で戻す |
| 集落抽出 | 学校・店舗などのまとまりを選び、中を全部調べる | 名簿が無く、まとまり単位なら手に入る | 同じ集落の中は似ていて、誤差が大きくなりやすい |
| 多段抽出 | 市区町村→地区→世帯のように段階的に選ぶ | 全国規模の調査 | 段ごとに誤差が重なる |
偏った選び方は、人数を増やしても外れたまま
作業時間が長い人ほど回答しやすい(回答する確率が作業時間に比例する)調査を作り、無作為に選んだ場合と比べました。
無作為1000人の平均(200回の平均)=89.94 偏った1000人=99.89 真の平均=89.94
偏った20000人の平均=98.57
偏った選び方では、1,000人でも2万人でも平均が約 99 分で、真の 89.94 分から 9 分前後ずれたままでした。無作為の1,000人のずれ(±1.8分)の5倍です。人数を増やして小さくなるのは標本誤差だけで、選び方の偏り(選択バイアス)は残ります。Web アンケートや「答えてくれた人だけ」の集計は、この形になりやすい点に気を付けます。
7日おきに選ぶと、曜日の周期と重なって外れる
平日が多く週末が少ないアクセス数の架空のデータ(364日)から、52日分を選ぶ方法を比べました。
base = np.array([1300, 1200, 1150, 1100, 1050, 600, 500]) # 月〜日
y = base[np.arange(364) % 7] + rng.normal(0, 40, 364)
print(y.mean(), y[0::7].mean(), y[1::7].mean(), y[0::5].mean())
全364日の平均 982.0
7日おき(開始0日目, 52件) 平均 1302.9
7日おき(開始1日目, 52件) 平均 1195.5
7日おき(開始2日目, 52件) 平均 1141.1
5日おき(73件) 平均 978.6
無作為52件(1000回) 平均の平均 981.6 標準偏差 37.7
曜日で層化 7x8=56件(1000回) 平均 982.2 標準偏差 4.3
無作為56件(1000回) 平均 981.9 標準偏差 35.0
| 選び方 | 件数 | 平均(真の値 982.0) | くり返したときのばらつき |
|---|---|---|---|
| 7日おき(月曜から) | 52 | 1,302.9 | 開始日で 1,141〜1,303 と決まる |
| 5日おき | 73 | 978.6 | - |
| 単純無作為 | 56 | 981.9 | 標準偏差 35.0 |
| 曜日で層化(各曜日8日) | 56 | 982.2 | 標準偏差 4.3 |
7日おきに選ぶと、毎回同じ曜日だけが選ばれ、平均が 1,303(月曜だけ)になりました。選ぶ間隔とデータの周期が重なると、全体とまったく違う値になります。これは後で扱う音声の「折り返し」と同じ仕組みです。一方、曜日ごとに同じ日数を選ぶ層化抽出は、同じ件数の無作為抽出よりばらつきが約8分の1(35.0→4.3)になりました。値を大きく変える要因(ここでは曜日)が分かっているなら、層に分けて選ぶと少ない件数で精度が上がります。
集めやすい人だけで全体を語る
見分ける問い:「選ばれなかった人と、選ばれた人に違いは無いか」
音声のサンプリング(標本化)とは:サンプリング周波数と量子化
この節では、音をデジタルにするときのサンプリング(標本化)と量子化の意味、サンプリング周波数とビット数で何が決まるかが分かります。
音声のサンプリングは、マイクから来る連続した電圧の波を、一定の時間間隔で測って数の列にすることです。1秒間に測る回数がサンプリング周波数(サンプリングレート、単位 Hz)で、48kHz なら 1 秒に 48,000 回測ります。測った値を決まった段階の数に丸めることを量子化と呼び、段階の細かさが量子化ビット数です。
flowchart TD
A[音の波] --> B[標本化<br>時間を刻む]
B --> C[量子化<br>高さを刻む]
C --> D[数の列 WAV]
サンプリング周波数
1秒に何回測るか。記録できる最も高い音は、この半分(ナイキスト周波数)まで。
横(時間)の細かさ
量子化ビット数
1回の値を何段階で表すか。16ビットなら 65,536 段階。小さい音の細かさと雑音の少なさが決まる。
縦(高さ)の細かさ
チャンネル数
モノラル 1、ステレオ 2。容量はそのまま倍になる。
同時に録る本数
容量(非圧縮)
周波数 × ビット数 ÷ 8 × チャンネル数 × 秒数。
WAV のバイト数
サンプリング周波数ごとの用途と容量
自作の 7kHz の正弦波(10秒・モノラル)を FFmpeg で作り、サンプリング周波数を変えて書き出したファイルの大きさです。WAV は非圧縮なので、容量は周波数に比例しました(ヘッダーの78バイトを除く)。
ffmpeg -f lavfi -i "sine=frequency=7000:sample_rate=48000:duration=10" -c:a pcm_s16le tone7k_48k.wav
for r in 8000 16000 22050 44100; do ffmpeg -i tone7k_48k.wav -ar $r tone7k_$r.wav; done
ffmpeg -i tone7k_48k.wav -ar 96000 -c:a pcm_s24le tone7k_96k24.wav
| サンプリング周波数 | 記録できる上限 | 主な用途 | 10秒・モノラルの WAV |
|---|---|---|---|
| 8kHz・16ビット | 4kHz | 電話品質の音声 | 160,078 バイト |
| 16kHz・16ビット | 8kHz | 音声認識・Web 会議の声 | 320,078 バイト |
| 22.05kHz・16ビット | 11.025kHz | 容量を抑えた音声・効果音 | 441,078 バイト |
| 44.1kHz・16ビット | 22.05kHz | 音楽 CD | 882,078 バイト |
| 48kHz・16ビット | 24kHz | 動画・放送・多くの録音機器 | 960,078 バイト |
| 96kHz・24ビット | 48kHz | 高音質の録音・編集用 | 2,880,102 バイト |
人の耳に聞こえる高さの上限は、おおむね 20kHz 前後と言われます。44.1kHz・48kHz は、その上限の2倍より少し大きい値です。声だけなら主な成分は数 kHz までなので、音声認識では 16kHz がよく使われます。
量子化ビット数と雑音の大きさ(実測)
自作の 1kHz の正弦波(振幅 0.9)を、4〜24 ビットに丸めたときの信号と誤差の比(SNR)を測りました。
ビット | 段階数 | 実測SNR | 理論 6.02N+1.76(フルスケール)
4 | 16 | 26.5dB | 25.8dB
8 | 256 | 49.2dB | 49.9dB
12 | 4,096 | 72.6dB | 74.0dB
16 | 65,536 | 98.2dB | 98.1dB
24 | 16,777,216 | 146.9dB | 146.2dB
1ビット増えるごとに、雑音との差が約 6dB 広がりました。16ビットで約 98dB、24ビットで約 147dB です。録音後に音量を上げ下げする編集では、24ビットで録っておくと、小さい音を持ち上げても丸めの雑音が目立ちにくくなります。
サンプリング周波数で何が変わるか(8k〜48kHzで取り直した実測)
この節では、同じ音を違うサンプリング周波数で取り直したとき、どの高さの音が残り、どの音が消えたり化けたりするかの実測が分かります。
自作の正弦波(1kHz〜20kHz)を、48kHz で作った後に 8k・16k・22.05k・44.1kHz へ取り直し、FFT で聞こえる周波数とレベルを測りました。「フィルターなし」は、高い音を削らずにそのまま間隔を空けて測った場合、「フィルターあり」は SciPy の resample_poly(取り直す前に高い音を削る低域通過フィルターをかける)を使った場合です。
from scipy.signal import resample_poly
x48 = 0.5 * np.sin(2 * np.pi * f0 * np.arange(48000) / 48000) # 48kHz で作った音
naive = 0.5 * np.sin(2 * np.pi * f0 * np.arange(fs) / fs) # fs でそのまま測る
filt = resample_poly(x48, up, down) # 削ってから取り直す
音 | 取り直す周波数 | フィルターなし: 聞こえる周波数 | フィルターあり(resample_poly): 周波数とレベル
5000 | 8000 | 3000Hz (-6.0dB) | 3000Hz (-63.3dB)
7000 | 8000 | 1000Hz (-6.0dB) | 1000Hz (-78.1dB)
7000 | 16000 | 7000Hz (-6.0dB) | 7000Hz (-6.3dB)
10000 | 16000 | 6000Hz (-6.0dB) | 6000Hz (-63.3dB)
10000 | 22050 | 10000Hz (-6.0dB) | 10000Hz (-6.8dB)
15000 | 22050 | 7050Hz (-6.0dB) | 7050Hz (-67.6dB)
15000 | 44100 | 15000Hz (-6.0dB) | 15000Hz (-6.0dB)
20000 | 8000 | 992Hz (-239.1dB) | 2017Hz (-250.0dB)
20000 | 22050 | 2050Hz (-6.0dB) | 2050Hz (-75.7dB)
20000 | 44100 | 20000Hz (-6.0dB) | 20000Hz (-6.8dB)
| 元の音 | 8kHz | 16kHz | 22.05kHz | 44.1kHz |
|---|---|---|---|---|
| 1kHz・3kHz | 残る | 残る | 残る | 残る |
| 5kHz | 3kHz に化ける | 残る | 残る | 残る |
| 7kHz | 1kHz に化ける | 残る | 残る | 残る |
| 10kHz | 2kHz に化ける | 6kHz に化ける | 残る | 残る |
| 15kHz | 1kHz に化ける | 1kHz に化ける | 7.05kHz に化ける | 残る |
| 20kHz | 消える(4kHz ちょうど) | 4kHz に化ける | 2.05kHz に化ける | 残る |
表の「化ける」はフィルターなしの結果で、元の音と同じ大きさ(−6.0dB)の別の高さの音として記録されました。フィルターありでは、同じ位置の音が −63〜−104dB まで小さくなり、ほぼ聞こえない大きさになりました。サンプリング周波数の半分より低い音は、どちらの方法でもそのまま残りました。16kHz で 7kHz(上限 8kHz の手前)を取り直すと −6.3dB と、上限の近くではフィルターの影響でわずかに小さくなりました。
20kHz を 8kHz で測った場合は、化けた先がちょうど 4kHz(8kHz の半分)になり、毎回の測定値がほぼ 0 になって音が消えました(−239dB)。上限ちょうどの音は、波のどこで測るかによって記録されたりされなかったりするため、サンプリング周波数は「最も高い音の2倍より大きく」とります。
FFmpeg で取り直すと、化ける音は自動で削られた
48k 48000 480000 peak 7000Hz level -18.1dBFS
8000 8000 80000 peak 3776Hz level -269.6dBFS
16000 16000 160000 peak 7000Hz level -18.5dBFS
22050 22050 220500 peak 7000Hz level -18.1dBFS
44100 44100 441000 peak 7000Hz level -18.1dBFS
FFmpeg の -ar 8000 で 7kHz の音を取り直すと、1kHz には化けず、ほぼ無音(−269.6dBFS)になりました。FFmpeg の音声の取り直し(libswresample)は、取り直す前に高い音を削るフィルターを通します(公式ドキュメントでは cutoff の既定値が 0.97、filter_size が 32)。ffmpeg や SciPy の取り直しの関数を使えば折り返しは防げますが、自分で「n 個おきに値を拾う」コードを書くと、フィルターなしの結果になります。ffmpeg のほかの使い方は、関連記事「ffmpegの使い方|MOV→MP4変換・圧縮・切り出しを実測で解説」で扱っています。
エイリアシング(折り返し)の再現と防ぎ方
この節では、エイリアシングがどういう現象か、化ける先の周波数の求め方と、録音・プログラムでの防ぎ方が分かります。
エイリアシング(aliasing、折り返し)は、サンプリング周波数の半分より高い音が、別の低い音として記録されてしまう現象です。化ける先は「元の周波数 − サンプリング周波数の整数倍」の絶対値のうち、半分以下になるものです。7kHz を 8kHz で測ると |7 − 8| = 1kHz、15kHz を 22.05kHz で測ると |15 − 22.05| = 7.05kHz で、前の節の実測と一致しました。
だんだん高くなる音で見ると「行って戻る」
100Hz から 20kHz まで5秒で上がる掃引音を自作し、8kHz で取り直しました。各時刻の 0.1 秒の区間で、最も強い周波数を測っています。
元の音の周波数 | 8kHzフィルターなし | 8kHzフィルターあり
0.5s 2090Hz | 2090Hz -16.0dB | 2090Hz -16.0dB
1.5s 6070Hz | 1930Hz -16.0dB | 1910Hz -80.8dB
2.0s 8060Hz | 40Hz -12.8dB | 40Hz -85.3dB
2.5s 10050Hz | 2050Hz -16.0dB | 2050Hz -92.0dB
3.5s 14030Hz | 1970Hz -16.0dB | 1970Hz -97.3dB
4.5s 18010Hz | 2010Hz -16.0dB | 2010Hz -100.2dB
フィルターなしでは、元の音が 4kHz を超えると記録された音は下がり始め、8kHz で 0 近く(40Hz)まで下がって、また上がりました。上がるはずの音が「上がって下がって上がって…」と往復する、折り返しの典型の聞こえ方です。フィルターありでは、4kHz を超えた部分が −80dB 以下になり、無音に近づきました。
残したい最も高い音を決める
声なら 4〜8kHz、音楽なら 20kHz 前後。用途から上限を決める。
その2倍より大きいサンプリング周波数を選ぶ
上限 8kHz なら 16kHz 以上、20kHz なら 44.1kHz か 48kHz。
取り直す前に高い音を削る
録音機器は A/D 変換の前に、プログラムは取り直しの関数(SciPy の resample_poly・FFmpeg の -ar など)でフィルターをかける。値を n 個おきに拾うだけの処理は使わない。
取り直した後の周波数を確かめる
高い音の入った試験音(掃引音)を通し、上限を超えた部分が消えているかを FFT やスペクトル表示で見る。
折り返しは音だけの話ではありません。前の統計の節で「7日おきに選ぶと月曜だけが選ばれた」のは、7日周期のデータを7日間隔で測った折り返しです。動画で回る車輪が止まって見えたり逆に回って見えたりするのも、1秒あたりのコマ数に対して回転が速すぎることで起きる同じ現象です。
音楽のサンプリングとサンプラー(自作の音で高さと長さを実測)
この節では、音楽制作でいうサンプリングの意味と、サンプラーが録音した音の高さを変える仕組み、権利の注意が分かります。
音楽のサンプリングは、録音した音の一部を切り出し、楽器のように鳴らしたり、ループにして曲の素材にしたりする手法です。サンプリングした音を鳴らす機器・ソフトをサンプラーと呼び、鍵盤の高さに合わせて再生の速さを変えることで、1つの録音から違う高さの音を出します。
再生の速さを変えると、高さと長さが一緒に変わる
440Hz に倍音を足して減衰させた「はじく音」を自分で合成し、再生の速さを変えて基本の高さと長さを測りました。
再生の速さ | 長さ | 基本の高さ | 半音
1倍 | 1.000秒 | 440.0Hz | +0.00
2倍 | 0.500秒 | 880.0Hz | +12.00
0.5倍 | 2.000秒 | 220.0Hz | -12.00
半音上 2^(1/12) | 0.944秒 | 466.2Hz | +1.00
7半音上 | 0.667秒 | 659.4Hz | +7.00
2倍の速さで鳴らすと、高さは1オクターブ(12半音)上がり、長さは半分になりました。半音上げるには 2 の 12 乗根(約 1.0595 倍)の速さで鳴らします。高い鍵盤ほど音が短くなるのは、この仕組みのためです。高さを変えずに長さだけ変えたいときは、時間伸縮の処理を使います。
ffmpeg -i pluck.wav -af atempo=2.0 pluck_tempo2.wav # 長さだけ半分
ffmpeg -i pluck.wav -af "asetrate=96000,aresample=48000" pluck_rate2.wav # 速さを2倍
pluck.wav 1.000s 440.0Hz
pluck_tempo2.wav 0.509s 440.0Hz
pluck_rate2.wav 0.500s 880.0Hz
FFmpeg の atempo=2.0 は高さを 440Hz のまま長さを約半分にし、asetrate で「元は 96kHz だった」と読み替えると、速さと高さの両方が2倍になりました。後者は、サンプラーの鍵盤で高い音を鳴らしたのと同じ動きです。
他人の録音をサンプリングするときの権利(一言)
CD や配信の音源など、他人の録音の一部を切り出して自分の曲に使うと、曲そのものの著作権に加えて、演奏した人(実演家)と録音を作った人(レコード製作者)の権利が関わります。文化庁の「著作隣接権」の解説には、実演家の「自分の実演を録音・録画する権利」(録音権・録画権)、レコード製作者の「レコードを複製する権利」(複製権)と、ネットで配信できる状態に置く権利(送信可能化権)が挙げられています。短い断片でも、使う前に権利者の許諾を得るか、利用条件が明示された素材を使います。この記事の実験では、自分で合成した音だけを使っています。
ログ・トレースのサンプリング(OpenTelemetryで1%に間引いた実測)
この節では、ログやトレースのサンプリングの意味と、ヘッドサンプリング・テールサンプリングの違い、割合を下げたときに何が残り何を見落とすかが分かります。
ログ・トレースのサンプリングは、すべてのリクエストを記録せず、一部だけを残して保存量と費用を減らすことです。OpenTelemetry の公式ドキュメントは、サンプリングを「処理・送信するトレースやスパンの代表的な一部を選ぶこと」と説明し、記録するかを最初に決める「ヘッドサンプリング」と、トレースの全体を見てから決める「テールサンプリング」を分けています。
OpenTelemetry Python SDK で 10%・1% に間引く
10万件のリクエスト(1件ごとに親スパン1つと子スパン2つ、0.5%がエラー)を記録し、サンプラーを変えて保存された数を数えました。送信先はメモリの中(InMemorySpanExporter)です。
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.sampling import TraceIdRatioBased, ParentBased
tp = TracerProvider(sampler=ParentBased(TraceIdRatioBased(0.01))) # 1%
opentelemetry-sdk 1.45.2
全部(ALWAYS_ON) | 保存したトレース 100,000 (100.00%) | 3スパンそろい 100,000 | エラー 473/473 | 推定エラー率 0.47% | 9.31秒
10% | 保存したトレース 10,075 (10.08%) | 3スパンそろい 10,075 | エラー 49/473 | 推定エラー率 0.49% | 3.17秒
1% | 保存したトレース 1,016 (1.02%) | 3スパンそろい 1,016 | エラー 5/473 | 推定エラー率 0.49% | 2.60秒
sampler: ParentBased{root:TraceIdRatioBased{0.01},remoteParentSampled:AlwaysOnSampler,...}
- 保存されたトレースは 10.08%・1.02% で、設定した割合どおりでした。保存されたトレースは3つのスパンが全部そろっていて、途中の欠けたトレースはありませんでした。ParentBased は、子スパンが親の判断に従うためです。
- エラーの割合(0.47%)は、1%に間引いても 0.49% と推定できました。全体の傾向を見るには少ない割合でも足りる、という公式ドキュメントの説明どおりです。
- 一方で、473件のエラーのうち、1%では5件しか残りませんでした。「この利用者のこのエラーを調べたい」ときは、99% の確率でその記録がありません。
同じ設定は、環境変数でも指定できました。割合に数でない値を書くと、警告を出して 1.0(全部記録)に戻りました。
$ OTEL_TRACES_SAMPLER=parentbased_traceidratio OTEL_TRACES_SAMPLER_ARG=0.25 python otel_env.py
ParentBased{root:TraceIdRatioBased{0.25},remoteParentSampled:AlwaysOnSampler,...}
$ OTEL_TRACES_SAMPLER=traceidratio OTEL_TRACES_SAMPLER_ARG=abc python otel_env.py
Could not convert TRACES_SAMPLER_ARG to float. Using default rate 1.0.
TraceIdRatioBased{1.0}
OpenTelemetry の導入からトレースの出力までは、関連記事「OpenTelemetry入門|Pythonで始めるトレース・メトリクス実装」で扱っています。
ヘッドとテールの違い:エラーと遅い処理を全部残せるか
全部 | 100,000件 / エラー 526 / 1秒以上 299
ヘッド1% | 993件 / エラー 8 / 1秒以上 3
テール(エラー+1秒以上は全部, 他1%) | 1,843件 / エラー 526 / 1秒以上 299
同じ10万件の模擬データで、最初にくじ引きで決めるヘッドサンプリング(1%)と、終わった後に「エラーか1秒以上かかったものは全部、残りは1%」で決めるテールサンプリングを比べました。テールは保存量が 1,843 件(1.8%)で、エラー 526 件と遅い処理 299 件を全部残せました。代わりに、トレースが終わるまで全スパンを手元に持っておく仕組み(OpenTelemetry Collector のテールサンプリングなど)が要り、その分の計算とメモリを使います。
ログのサンプリング:INFO だけ 5% にする
class Sample(logging.Filter):
def filter(self, rec):
if rec.levelno >= logging.WARNING:
return True # 警告以上は全部残す
return self.r.random() < self.rate # INFO 以下は rate の割合だけ
出したログ INFO 197,642 WARNING 1,988 ERROR 370 計 200,000
残ったログ INFO 9,809 WARNING 1,988 ERROR 370 計 12,167 (6.1%)
INFO の件数を戻す推定 196,180(実際 197,642)
INFO だけを 5% に間引き、警告とエラーは全部残すと、ログの行数は 6.1% になりました。間引いた INFO の件数は「残った件数 ÷ 割合」で 196,180 件と推定でき、実際の 197,642 件と 0.7% の差でした。件数を数え直したいときのために、ログに割合(例:sample_rate=0.05)を書き添えておくと、後から集計で戻せます。どのレベルに何を出すかは、関連記事「ログレベルの使い分け|ERROR・WARN・INFO・DEBUGの判断基準とログ設計」で扱っています。
生成AI・機械学習でのサンプリング(temperature・top_p・データの偏り)
この節では、生成AIの文章生成でいうサンプリングと、機械学習のデータでいうアンダー/オーバーサンプリングの意味が分かります。
生成AI(大規模言語モデル)のサンプリングは、次に来る語の確率の一覧から、確率に従って1つを選ぶことです。いつも最も確率の高い語を選ぶと毎回同じ文になり、確率に従ってくじを引くと文に変化が出ます。temperature は確率の差を強めたり弱めたりする値、top_p は確率の高い順に足して p に届くまでの候補だけから選ぶ設定です。手元で、5つの語の確率の一覧を作って1,000回選びました(API には接続していない模擬です)。
temperature 0.2: 確率 晴れ98% くもり2% 雨0% 雪0% 台風0% | 1000回で違う語 3種 晴れ981回
temperature 0.7: 確率 晴れ68% くもり22% 雨8% 雪1% 台風0% | 1000回で違う語 5種 晴れ700回
temperature 1.0: 確率 晴れ57% くもり26% 雨13% 雪4% 台風1% | 1000回で違う語 5種 晴れ590回
temperature 1.5: 確率 晴れ46% くもり27% 雨17% 雪8% 台風3% | 1000回で違う語 5種 晴れ474回
top_p 0.9 で残る語: ['晴れ', 'くもり', '雨']
temperature 0.2 では「晴れ」が 981 回選ばれ、1.5 では 474 回まで減りました。top_p 0.9 では確率の低い「雪」「台風」が候補から外れました。各社の API での設定の目安は、関連記事「temperatureとは?top_p・max_tokensの意味と設定目安表」で扱っています。
機械学習のデータでは、正常 99%・不正 1% のように件数が偏ったとき、多いほうを減らす「アンダーサンプリング」、少ないほうを増やす(複製や合成で作る)「オーバーサンプリング」でそろえることを指します。どちらも学習用のデータだけに行い、評価用のデータは元の割合のまま残します。評価用まで増やすと、実際より良い成績が出てしまいます。
プログラムでサンプリングする(Python・NumPy・pandasの書き方と再現性)
この節では、データから無作為に一部を取り出すコードの書き方と、同じ結果をもう一度出す方法が分かります。
| やりたいこと | 書き方 | 重複 |
|---|---|---|
| リストから k 個(Python 本体) | random.sample(seq, k) |
同じ要素を2回選ばない |
| 重複ありで k 個 | random.choices(seq, k=k) |
重複あり |
| 配列から n 個(NumPy) | rng.choice(a, size=n, replace=False) |
replace で切り替え |
| 重み付きで選ぶ | rng.choice(a, size=n, p=重み) |
重みの合計は 1 |
| 表から n 行・割合で(pandas) | df.sample(n=100)・df.sample(frac=0.1) |
既定は重複なし |
| 層ごとに同じ割合で(pandas) | df.groupby("曜日").sample(frac=0.1) |
層化抽出 |
同じ標本をもう一度取り出すには、乱数の種(シード)を固定します。手元で、種を同じにすると何度実行しても同じ行が選ばれました。
random.Random(42).sample(range(100), 5) → [81, 14, 3, 94, 35](2回とも同じ)
df.sample(n=3, random_state=1) → [2, 9, 6](2回とも同じ)
df.sample(frac=0.2, random_state=2) → [4, 1]
分析の結果を報告するときは、使った種の値と抽出の条件も残しておくと、他の人が同じ標本で確かめ直せます。Python の random モジュールの関数の一覧は、関連記事「Python randomの使い方一覧|randint・choice・shuffle」で扱っています。
サンプリングのよくあるエラー・つまずき(症状→原因→直し方)
この節では、サンプリングのコードや音声の変換で出るエラーの原文と、エラーが出ないまま結果がずれる典型が分かります。
| 症状(原文) | 原因 | 直し方 |
|---|---|---|
| ValueError: Sample larger than population or is negative | random.sample で、要素数より多く選ぼうとした | k を len 以下にする。重複ありでよいなら random.choices |
| TypeError: Population must be a sequence. For dicts or sets, use sorted(d). | random.sample に set を渡した(Python 3.11 以降) | sorted(集合) や list にしてから渡す |
| ValueError: Cannot take a larger sample than population when replace is False | NumPy の choice で、重複なしのまま要素数より多く選んだ | size を減らすか replace=True にする |
| ValueError: Probabilities do not sum to 1. | 重み p の合計が 1 になっていない | p = w / w.sum() で割ってから渡す |
| ValueError: Cannot take a larger sample than population when 'replace=False' | pandas の df.sample で、行数より多い n を指定した | n を減らすか replace=True |
| ValueError: Please enter a value for `frac` OR `n`, not both | df.sample に n と frac を両方書いた | どちらか一方にする |
| Specified sample rate 7000 is not supported by the libmp3lame encoder | MP3 で使えないサンプリング周波数を指定した(Opus は 48000 などに限られる) | エラーの下に出る Supported sample rates の一覧から選ぶ |
| Error parsing sample rate: -5. | ffmpeg の -ar に負の値など不正な値を書いた | 8000・16000・44100・48000 などの正の整数にする |
| wave.Error: sampling rate not specified | Python の wave モジュールで setframerate に 0 を渡した(または呼んでいない) | setframerate(48000) などを書き込み前に呼ぶ |
| Could not convert TRACES_SAMPLER_ARG to float. Using default rate 1.0. | OTEL_TRACES_SAMPLER_ARG に数でない値を書いた | 0.0〜1.0 の数を書く。全部記録に戻っている点に注意 |
| (エラーなし)高い音が別の低い音に聞こえる | フィルターをかけずに n 個おきに値を拾った(折り返し) | resample_poly・ffmpeg -ar など、フィルター付きの関数で取り直す |
| (エラーなし)定期的に取ったデータの平均が大きくずれる | 取る間隔がデータの周期(曜日・時刻)と重なった | 無作為に取るか、曜日・時刻で層に分けて取る |
| (エラーなし)調べたいエラーのトレースが無い | ヘッドサンプリングで割合だけで捨てられた | エラー・遅い処理を全部残すテールサンプリングか、エラー時はログを全部残す設定にする |
- 1標本の件数と抽出の方法を結果に添える「平均 89.9 分(無作為に1,000人)」と書くと、誤差の大きさを読む人が見積もれる
- 2等間隔で取る前に、周期が無いかを見る曜日・時刻・季節の周期と取る間隔が重なると、7日おきの例のように大きく外れる
- 3音声は残したい上限の2倍より大きい周波数で、フィルター付きで取り直すn 個おきに拾うコードは書かない
- 4ログ・トレースの割合を記録に残すsample_rate を書いておけば、件数を後から推定し直せる
- 5乱数の種を固定し、値を記録する同じ標本で他の人が確かめ直せる
サンプリングの判断表(場面別に何を決めるか)
この節では、場面ごとにサンプリングで決めることと、実測から分かった目安が分かります。
| 場面 | 決めること | 目安(この記事の実測) | 失うもの |
|---|---|---|---|
| アンケート・調査 | 母集団・選び方・人数 | 無作為1,000人で割合の誤差およそ±3ポイント | 標本誤差。偏りは人数では消えない |
| 時系列から一部を取る | 間隔・層 | 周期があれば層化。曜日で層化するとばらつき約1/8 | 周期と重なると大きく外れる |
| 声の録音・音声認識 | サンプリング周波数・ビット数 | 16kHz・16ビット(上限 8kHz) | 8kHz より高い成分 |
| 音楽・動画の音 | 同上 | 44.1kHz か 48kHz。編集用は 24ビット | ほぼ無し(耳の上限付近まで残る) |
| 周波数を下げて書き出す | 変換の方法 | フィルター付きで変換(化ける音は −63dB 以下) | 新しい上限より高い音 |
| トレース | 割合・ヘッドかテールか | 1% でもエラー率は推定できた。個別のエラーはテールで全部残す | 個別の珍しい出来事 |
| アプリのログ | レベルごとの割合 | INFO 5%・警告以上は全部で行数 6.1% | 個々の正常なリクエストの記録 |
| 機械学習の学習データ | 減らすか増やすか | 学習用だけに行い、評価用は元の割合のまま | 減らした分の情報、増やした分の過学習の危険 |
割合だけで全部のログ・トレースを間引く
見分ける問い:「傾向を見たいのか、1件を追いたいのか」
よくある質問
Q. サンプリングを日本語で言うと何ですか?
A. 場面で変わります。統計なら「標本抽出」、音声なら「標本化」、販促なら「試供品の配布」、ログなら「間引き」「抽出」です。どれも「全体から一部を取り出す」意味です。
Q. サンプルとサンプリングの違いは?
A. サンプルは取り出された「もの」(見本・標本・1回分の測定値)、サンプリングは取り出す「こと・やり方」です。音声では、1秒に 48,000 個のサンプルを取ることを「48kHz でサンプリングする」と言います。
Q. マーケティングのサンプリングとは?
A. 商品の試供品を無料で配り、実際に試してもらって購入につなげる販促の手法です。街頭で配る、通販の荷物に同封する、Web で申し込んだ人に送る、などの方法があります。
Q. 標本は何人いれば信用できますか?
A. 許せる誤差で決まります。手元の実測では、割合の誤差が 100 人で約±10ポイント、1,000 人で約±3ポイント、2,500 人で約±2ポイントでした。ただし、選び方が偏っていると人数を増やしても外れたままです。
Q. サンプリング周波数は高いほど音が良いのですか?
A. 記録できる高さの上限が上がりますが、上限が耳に聞こえる範囲を超えると、違いは容量の増加として出ます。手元では 96kHz・24ビットの WAV は 48kHz・16ビットの3倍の大きさでした。用途に合わせて選びます。
Q. 44.1kHz と 48kHz はどちらを使えばよいですか?
A. 音楽 CD 向けなら 44.1kHz、動画・放送向けなら 48kHz が一般的です。行き先と同じ周波数で録ると、変換の手間と変換による小さな劣化を避けられます。
Q. ナイキスト周波数とは?
A. サンプリング周波数の半分の周波数で、正しく記録できる高さの上限です。48kHz なら 24kHz です。これより高い音は、実測のように別の低い音に化けます。
Q. エイリアシングは後から取り除けますか?
A. 取り除けません。化けた音は元から入っていた音と同じ高さの数の列になり、区別ができないためです。取り直す前に高い音を削るのが唯一の防ぎ方です。
Q. 音楽でサンプリングしてよいのはどんな音ですか?
A. 自分で録音・合成した音、権利者から許諾を得た音、利用条件が明示された素材の音です。他人の録音を使う場合は、曲の著作権のほかに実演家とレコード製作者の権利(著作隣接権)が関わると文化庁が解説しています。
Q. トレースのサンプリング率はどれくらいにしますか?
A. 量と目的で決めます。OpenTelemetry の公式ドキュメントは、1秒に 1,000 件以上のトレースがある場合などを、サンプリングを考える目安に挙げています。手元では 1% でもエラー率(0.47%)を 0.49% と推定できましたが、個々のエラーは 473 件中 5 件しか残りませんでした。
Q. 生成AIの「サンプリング」をやめると何が起きますか?
A. いつも最も確率の高い語を選ぶので、同じ入力に同じ文が返りやすくなります。手元の模擬では temperature 0.2 で「晴れ」が1,000回中981回選ばれました。変化のある文がほしいときは temperature を上げます。
まとめ
- サンプリングとは、全体から決まりに沿って一部を取り出すこと。ふだんは試供品の配布や抜き取り検査、IT では統計の標本抽出・音声の標本化・ログの間引き・音楽の素材づくり・生成AIの語の選択を指す。
- 統計では、無作為に選べば誤差は人数の平方根に反比例する(100人→1万人で約1/10)。偏った選び方は2万人でも外れたままで、7日おきの抽出は曜日の周期と重なって平均が 982 から 1,303 にずれた。
- 音声では、サンプリング周波数の半分が記録できる上限。フィルターなしで取り直すと 7kHz が 1kHz に化け、SciPy・FFmpeg のフィルター付きの変換では −63dB 以下に消えた。
- 音楽のサンプリングは、再生の速さで高さと長さが一緒に変わる(2倍で1オクターブ上・長さ半分)。他人の録音を使うと、曲の著作権に加えて著作隣接権が関わる。
- ログ・トレースは 1% でも傾向は推定できたが、個々のエラーは見落とす。正常だけを間引き、エラー・遅い処理は全部残し、割合を記録に書き添える。
参考・出典
確認日:2026年10月29日
- コトバンク「サンプリング」(デジタル大辞泉・日本国語大辞典・マーケティング用語集ほか):https://kotobank.jp/word/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0-3817
- 総務省統計局 統計図書館ミニトピックス No.15「統計のよろめき?」(標本誤差の説明):https://www.stat.go.jp/library/pdf/minitopics15.pdf
- 文化庁「著作隣接権」:https://www.bunka.go.jp/seisaku/chosakuken/seidokaisetsu/gaiyo/chosaku_rinsetsuken.html
- SciPy「scipy.signal.resample_poly」:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.resample_poly.html
- FFmpeg「FFmpeg Resampler Documentation」:https://ffmpeg.org/ffmpeg-resampler.html
- ITU-T「G.711 : Pulse code modulation (PCM) of voice frequencies」:https://www.itu.int/rec/T-REC-G.711
- OpenTelemetry「Sampling」:https://opentelemetry.io/docs/concepts/sampling/
- OpenTelemetry Python「opentelemetry.sdk.trace.sampling」:https://opentelemetry-python.readthedocs.io/en/stable/sdk/trace.sampling.html
- Python「random — 擬似乱数を生成する」:https://docs.python.org/ja/3/library/random.html
- NumPy「numpy.random.Generator.choice」:https://numpy.org/doc/stable/reference/random/generated/numpy.random.Generator.choice.html
- pandas「pandas.DataFrame.sample」:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sample.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「サンプリングとは?意味を場面別に|統計・音声・音楽・ログを実測」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。