Pythonを使用して列にカテゴリカルデータがあるかどうかを統計的に証明する方法


10

すべてのカテゴリー変数を見つける必要があるpythonのデータフレームがあります。int型もカテゴリ型になる可能性があるため、列の型のチェックは常に機能するとは限りません。

したがって、列がカテゴリカルであるかどうかを識別するための正しい仮説検定方法を見つけるのに助けを求めます。

私はカイ二乗検定の下で試しましたが、これで十分かどうかはわかりません

import numpy as np
data = np.random.randint(0,5,100)
import scipy.stats as ss
ss.chisquare(data)

お知らせ下さい。


1
序数変数として使用されるintと任意のカテゴリコーディングとして使用されるintを区別したいことを正しく理解できたかどうかを明確にできますか?私には答えはありませんが、他の読み物があなたが望むものを明確にするのに役立つかもしれません。直感的には、Chi2が確実に仕事をすることができるとは思いません。
ReneBt

はい、あなたは正しいです。私の焦点は、変数の型ではなく、変数が運ぶデータにあります。したがって、コード例で共有した結果は、一意の値が5つしかないため、カテゴリ変数であるという結果になるはずです。
アミット2018年

1
ルールはどこにありますか?「結果は、一意の値が5つしかないため、カテゴリ変数である必要があります。」から来る?
Dennis Soemers 2018年

ああ、それはルールではありません。直感的に、私のすべての列データはこれらの5つの値のみであることを知っています。
アミット2018年

他の人はそれができないことを正しく指摘しましたが、それでもなお、これは興味深い機械学習の問題を引き起こします。間違いなく、かなり正確な予測を行うことができる問題領域があります。
ジョンコールマン

回答:


34

短い答え:できません。

1〜10の整数を含む予測子が数値予測子(たとえば、子の数)であるか、または10の異なるカテゴリをエンコードするかどうかを示す統計的検定はありません。(予測子に負の数が含まれている場合、または最小数が1より大きい場合、または整数をスキップする場合、これはカテゴリカルエンコーディングであることに反対する可能性があります。または、分析者が非標準のエンコーディングを使用したことを意味するだけかもしれません。)

確実にする唯一の方法は、ドメインの専門知識またはデータセットのコードブック(常に存在しているはずです)を活用することです。


14
「データセットのコードブック(常に存在するはずです)」—いいですね。
コディオロジスト2018年

12

データセットで機能する基準(または経験則)はどのようなものでもかまいませんが、データを確認することはできません。いずれにせよ、問題は一般的により適切であり、特定のソフトウェアにも言及していません。

たとえあなたが思っているよりも悪いと思っていても、あなたが思っているよりも悪いです。

  1. @Stephan Kolassaの回答は、すでに1つの重要なポイントとなっています。小さい整数は、カテゴリではなく数を意味する場合があります。3は車または猫を意味し、3は「人が車を所有している」または「人は猫が所有している」を意味する3と同じではありません。

  2. 小数点は、コード化された分類の一部として、産業や病気などのカテゴリ変数内に潜む可能性があります。

  3. 測定の厳密な意味は、慣例により単なる整数である可能性があります。たとえば、人の身長は整数cmまたはインチとして報告され、血圧は整数mm Hgとして報告されます。

  4. 個別の値(「一意」よりも適切な用語で、1回だけ発生するという主要な意味を持っています)の数も適切なガイドではありません。適度なサンプルで考えられるさまざまな身長の数は、さまざまな宗教や民族の起源の数よりもはるかに少ないでしょう。


+1。これは考慮すべき事柄の良いリストです。これをデータセット(およびドキュメント)に関するドメインの知識と組み合わせて、カテゴリ変数の検出を自動化する必要があります。
アンナ

@Anna 自動検出を実行するべきではなく、このスレッドで概説されているように、問題を引き起こす可能性があると私は思います。ドメインの知識とドキュメントは、他の変数の中から多変数変数を容易に識別できるため、推測する必要はありません。
prince_of_pears 2018

7

まあ、他の回答が示唆するよりもさらに悪いと思います。データはカテゴリまたは数値の下位種ではありません。「測定レベル」は、特定の機会に特定の質問に答えるためにアナリストによって規定されたものです。Glen_bの回答はこちらをご覧ください。

それを理解することは実際上重要です。たとえば、分類ツリーでは、比率、間隔、順序レベルの予測子の違いは重要ではありません。重要な唯一の違いは、順序と名目上の予測子の違いです。アルゴリズムを制約して、ラインに沿ったポイントで予測子を分割し、高い値と低い値を分離すると、予測パフォーマンスに大きな影響を与える可能性があります。これは、(推定順序)予測子の応答との関係の滑らかさに応じて、良いか悪いかによって異なります。 &データセットのサイズ。分析しようとする分析に関係なく、予測変数が現実をどのように表すかについての黙想だけに基づいて決定を下す賢明な方法はありません。


0

これは未解決の研究問題です。たとえば、Valeraらの研究を参照してください。(論文)または拡張(例えば、Dhir et al。- 論文によるもの)。

編集:

統計と機械学習の一般的な方法は、変数の統計データタイプ(例:順序、カテゴリ、または実数値)と、通常は尤度モデルも既知であると想定することです。ただし、実際のデータの可用性が高まると、この仮定は非常に制限的になります。多くの場合、データは異質で複雑であり、不適切または不完全に文書化されています。驚くべきことに、それらの実用的な重要性にもかかわらず、データセット内の変数の統計タイプと適切な尤度(ノイズ)モデルを自動的に検出するツールがまだありません。

(バレラ紙より)

したがって、これが「未解決の質問」(奇妙なことに私自身を引用する)であると言うとき、有限のサンプルが与えられたデータのタイプを推測するための適切な自動方法は現在ないことを意味します。無限のサンプルがある場合、これは簡単ですが、それは不可能なので、他の方法に戻す必要があります。


「オープンリサーチクエスチョン」で何を指しているのか教えていただけますか?あなたの回答がこのスレッドの他の回答とどのように矛盾していないか(または実際に矛盾していないか)の説明も検討してください。
whuber

もちろん、回答を編集させてください。
アストリッド

ありがとうございました。Valeraの論文を熟読すると、私はそれがはるかに強力な主張をしているように見えました。私は方法を研究しませんでしたが、そのような変数と、それらが関連していると思われる他の変数との間の関係を調べることに基づいている必要があると思います。「無限サンプル」(それが何であれ)がどのように追加で使用されるかを理解できません。それが問題を「簡単」にする方法を説明できますか?
whuber

これは実際には非常に堅牢な方法であり、私自身も詳細に調査しました(これにより、多少偏見が生じます)。彼らの考えはとても賢いです。各列タイプはタイプの混合として(混合モデルのように)記述できると想定し、最も高い重みを持つタイプを見つけて、対応する「タイプ」を変数の実際のタイプと呼びます。型推論に関する限り、それは非常に賢く、最良の自動化方法(私が知っている)です。他の人が他の人を知っている場合は、共有してください!
アストリッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.