多くの場合、1行で記述されたアドレスの自動解析のための新しいアルゴリズムを備えた記事がHabréに掲載されます。 さらに、アドレス処理サービスは、さまざまなit社によって提供されます。 この記事では、アドレスベースを使用して自動アドレス解析アルゴリズムを選択する方法と、アドレスフィルターアルゴリズムをテストおよび開発する際に注意すべきことを説明します。
この記事は、顧客データを保存し、次の問題のいずれかを解決したいすべての人を対象としています。
- 小包や手紙をどこにも送らないように、住所が存在することを確認してください。
- 住所をコンポーネントに分解して、売り上げが向上している場所を把握します。
- 宅配業者の作業計画を最適化するために、不足している情報で住所を補足します。
- アドレスを標準化して、同じクライアントの重複レコードを見つけます。
- 規制当局のチェックに合格するために、アドレスを更新してディレクトリの形式に戻す。
メールアドレスを自動的に解析するタスクは、一見非常に単純に思えます。アドレスディレクトリ( FIASなど )を入力行の単語と比較します。 しかし、それを引き受ける誰もが多数のアドレス機能に埋もれています...
住所について知っていること
まず、自己紹介をしてください。 私たちは9年以上にわたって自動アドレス解析のタスクを扱ってきました。 この間、大企業と中小企業の両方で働いてきました。 私たちのアイデアが実際のシステムでの住所処理の品質にどのように影響するかをよく理解するために、顧客データの形式を記述する多数の住所を蓄積しました。
過去1年間、アドレス解析アルゴリズムに終止符を打つために、新しいバージョンのアルゴリズム(アドレスフィルターと呼びます)を開発してきました。
タスクを定義する
現在の有効なアドレスを取得する3つの方法を知っています。
最初のオプションは最適ですが、疑わしい品質のアドレスの大規模なデータベースを既に持っている人には適していません。
2番目のオプションには、適切に分類されたアドレスの大部分が含まれますが、私たちの実践が示すように、高価で時間がかかります。
3番目のオプション自体は、2番目のオプションと同じ割合で適切にソートされたアドレスを提供することはありませんが、安価ではるかに高速です。
2番目と3番目のポイントの合成バージョンを使用することをお勧めします。
- アドレス解析の品質の指標でアドレスを自動的に解析します。
- 品質の良い指標を持つアドレスはビジネスプロセスに送信する必要があり、悪いもののアドレスは分析のためにオペレータに送信する必要があります。
したがって、許容範囲内で解析済みアドレスの大部分を取得できます。
このオプションを使用するか、アドレスを自動的にのみソートする場合は、自動データ解析に適切なアルゴリズムを選択する必要があります。 これを行う方法については、さらに説明します。
料理の住所
アルゴリズムを選択するには、特定のボリュームのアドレスを異なるアルゴリズムで処理した結果を分析する必要があります。 実際のデータからアドレスの一部を取得し、エラーやタイプミスのあるアドレスの何パーセントが正しく認識されるかをチェックするために、表面的な修正を加えたアドレスを追加することは論理的なようです。
最初の間違い:タイプミスを自動的に修正する-よく
最初に自動アドレス解析のタスクに遭遇したほとんどのお客様は、最初に、タイプミスの修正が、自尊心の高いアルゴリズムでできることだと思っていました。
その後、アドレスでアルゴリズムを確認する代わりに、顧客が前例のないケースを発明し、 「Ikhonravova、Maskva、Yubileiny、MK」から「Moscow Region、Yubileiny、チコンラヴォフ通り」 。 戦闘状態では、この機能は使用されないだけでなく、アドレスのメインベースとの連携にも悪影響を及ぼします。
当社の調査によると、企業システムの送信元アドレスでは、タイプミスのあるアドレスの2%を超えることはめったにありません。すべてのお客様の中で、このようなシステムの割合は5%未満です。 この場合、ほとんどのタイプミス(すべてのタイプミスの約95%)は本質的に全身性です。つまり、 Maskvaなどの一般的なタイプミスか、 通りの外観の修正です。 3番目のMytishchinskaya >>> st。 3番目のMytishchinskayaまたはst。 トルストイ>>> st。 トルストイ 。 これらのタイプミスは、それらを修正するルールの有限セットによって説明できます。
一般的なケースで誤字修正が悪いのはなぜですか? n-gram、Levenshtein distanceなどによるすべてのタイプミスを修正することにより、アルゴリズムはアドレスをディレクトリにプルしようとし、ソースアドレスで意図されていたものを取得する可能性が高くなります。 さらに、送信元アドレスには、アドレスディレクトリにない追加情報(会社名、ビジネスセンター、地下鉄からの行き方など)が含まれている場合があります。 誤字修正アルゴリズムでは、これらの追加はアドレスの通常のコンポーネントとして認識される可能性が非常に高いです。
9年間の作業で、タイプミスを正しい分析オプションにのみ持ち込めることを保証する規則に従ってのみタイプミスを修正する必要があるという結論に達しました。
したがって、人為的な歪みのない実際のデータでのみアルゴリズムをチェックすることをお勧めします。 たとえば、データベースにモスクワプーシキン13というアドレスがある場合は、 マスクプーシキーノ13ではなく、それを使用します。
タイプミスは注意して扱う必要があります。 上記のタイプミス修正ロジックでアルゴリズムを使用した場合の最悪の結果は、高品質のコードでアドレスが正しく解析されないことです。
2番目のエラー:よくソートされたアドレスの割合は、フィルターを選択するための主要な基準です(もちろんコストを除く)
入力用のアドレスの自動解析のためのアルゴリズムは、アドレスを受け入れ、出力で-標準化された形式で生成します。 通常、彼はアルゴリズムがアドレスの解析に自信があるかどうかを示すサインを返すことができます。 このような機能は通常、品質コードと呼ばれます。
解析用の高品質コードを持つお客様の住所は自動的にビジネスプロセスに送られ、品質の低いコードでは手動解析用に送信されます。 質の高いコードを持つ住所の割合が大きいほど、顧客は住所を手動で処理するプロセスで節約できます。
したがって、アルゴリズムを選択する主な基準は、高品質のコードを持つアドレスの割合です。
多くの場合、1つの重要なポイントを忘れています。品質の悪いコードの住所を、品質の良いコードの住所が誤って認識されるシステムでの結果を修正するよりも、手頃なものにする方がはるかに安価です。
たとえば、現在、不動産の価値を評価するためのシステムを開発しています。各住宅の平方メートルあたりのコストは既知であり、ローンを発行する際のクライアントの支払能力の評価に使用されます。 システムは、ネットワーク上のアパートの販売に関する新しい広告を自動的に分析し、住所を標準化し、ディレクトリ内の平均コストを調整します。 標準化された住所の中に、誤った解析と高品質のコードを持つ多くの住所が存在する場合、ディレクトリに多くのエラーがあり、アパートの実際の平均コストの代わりに、数倍高くまたは低くなります。 このようなアドレスを見つけるのは困難ですが、ビジネスプロセスに大きな悪影響を及ぼします。
すべてのタイプミスの自動修正が悪い理由です。アルゴリズムは、意図的に悪いアドレスを良質のコードを持つディレクトリに引き付けようとします。これにより、逆エラーの割合、つまり良質のコードを持つアドレスの割合が増加しますが、誤って標準化されます。
注目すべきアドレス
アドレスフィルタアルゴリズムを比較して、高品質のコードを持つアドレスの割合だけでなく、高品質のコードを持つ誤ってソートされたアドレスの割合も調べます。 危険度の高い住所を書く場合など、住所のサンプルを準備することをお勧めします。
- タイプミスまたは住所コンポーネントの誤った指示がある住所 (たとえば、 3番目のMytishchiではなく3番目のMytishchi )。
- オペレータによる分析中も含め、議論されていることをソースデータからのみ明確に決定することが不可能なあいまいなアドレス 。 たとえば、住所コンポーネントの欠落または誤った指定: モスクワ、トヴェルスカヤは、トヴェルスカヤ広場と通りの両方を意味する場合があります。
- アドレスコンポーネントのタイプを指定する際のエラー。 データによると、顧客の住所の約5%には、住所コンポーネントのタイプを示す何らかのエラーが含まれています。「都市型村」の代わりに「村」、「行き止まり」の代わりに「車線」などを記述しています。
- コンポーネント自体を指定する際のエラー。 ほとんどの場合、誤って示されます:
- 2つの地区の境界にある場合は、居住地のある地域。 たとえば、ザプルドゥニャ村のドミトロフスキー地区モスクワ地区の住所では、地区は誤って示されており、正確にはタルドムスキーです。
- オブジェクトが配置されている地域。 これは、モスクワとサンクトペテルブルクの住所で特に一般的です。たとえば、
- フォンタンカ、サンクトペテルブルク、レニングラード地域
- モスクワ地域、モスクワ、聖 ラストグエバ
- モスクワ地域、ゼレノグラード、3113
- 名前、ランク、またはその他の一般的な誤解の間違い。 たとえば、 Aleksey Tolstoy Streetの代わりにLeo Tolstoyを作成したり、 Zhukov元Marの代わりにZhukov 将軍 を作成したりします。 時々、彼らはまた、地元住民だけに知られているいくつかの時代遅れのまたは地元の名前を与えます。
- ソース行の単語の複製。 システムからシステムへの多くの変換と移行の後、重複するコンポーネントを持つアドレスが形成されることがあります。 たとえば、ある会議には、 モスクワ、モスクワ、モスクワ、モスクワ、モスクワ、レニングラードスキープロスペクト、39、79ページのアドレスがありました。 明らかに、ここでモスクワという言葉は誤って数回書かれており、アルゴリズムは送信元アドレスからの重複を考慮していない可能性があります。 しかし、重複は常に削除できますか? 別の例: サハリンスカヤ、ユジノサハリンスク、サハリンスカヤは、 サハリン地域、ユジノサハリンスク 、サハリンスカヤ通りの住所を意味します。 適切なアルゴリズムは、重複が実際に重複しており、アドレスを誤った解析に流さない場合にのみ重複を見つけることです。
- ソースデータのガベージまたは追加情報。 通常、これは建物自体とそのアクセス方法に関する完全な名前または追加情報です。 例: イワノフイヴァン、ピロゴヴァ20〜1合計8/1部屋313、ノボシビルスク、NSOまたはモスクワ、トゥルチャニノフ、BCクリミア橋、家6、2、地下鉄から2分、 良い給料 。 このような場合、アドレス解析の品質に影響を与える可能性があるため、アドレス指定可能なコンポーネントではない入力行のすべてのコンポーネントまたは頻繁に遭遇する追加の住所情報(たとえば、メトロまたは都市地区)を分析のためにオペレーターに送信する必要があります。
- 古いアドレス。 これらは現在は異なっている住所です。つまり、通りの名前が変更されたり、別の集落に移動したり、団結したりすることがあります。 Samara 13 proezdとSamara George Ratnerの 2つの住所がある場合、これが同じ住所であることを理解しておくと便利です。 アルゴリズムは、アドレスを更新し、更新された場合にのみ適切な品質のコードを設定できる必要があります。
アルゴリズムの比較
テストサンプルを準備すると、すべてが簡単になります。 さまざまなアルゴリズムでアドレスを処理し、基準に従ってそれらを比較します。
- 適切なアドレス (つまり、ゴミ、あいまいさ、タイプミスのないアドレス ) の解析の割合 。 アルゴリズムは、高品質のコードで適切なアドレスを正しく解析できる必要があります。
- 不良アドレスの解析の割合。 アルゴリズムは、可能な限り不良アドレスを解析できる必要があります。つまり、アドレスが不良であるが、良質のコードで適切に解析できる場合、アルゴリズムはこれを実行できるはずです。
- 逆エラーのあるアドレスの割合。 アルゴリズムには最小限の逆エラーが含まれている必要があります。つまり、解析が正しくないアドレスに対して良質のコードを出力しないでください。 これがすべての最も重要なポイントであるように思われます。
- 標準化された住所の追加プロパティの存在。 アルゴリズムは、品質の低いコードのアドレスを分析および操作するための便利なレバーを提供する必要があります。 同時に、ツールを使用した作業は簡単でわかりやすいものにする必要があります。
結論
自動アドレス解析のタスクは、一見すると思えるほど単純ではありません。 アドレスの解析にアルゴリズムを選択するか、独自のアルゴリズムを作成する場合は、このプロセスに正しくアプローチする必要があります。既存のアドレスを分析し、テスト用の代表的なサンプルを作成します。 この記事がこの作業に役立ち、すべての住所が自動的かつ正しくソートされることを願っています。
PS:1か月以内に、 dadata.ruの記事の冒頭で説明したアドレスフィルターの新しいバージョンをインストールします 。 登録して最新情報を入手し、新しいアルゴリズムの最初の研究者になりましょう。
この記事を支援してくれたchipQAに感謝します。