Thẩm định tên miền


25

Kinh doanh tên miền là kinh doanh lớn. Một trong những công cụ hữu ích nhất để giao dịch tên miền là một công cụ thẩm định tự động, để bạn có thể dễ dàng ước tính giá trị của một tên miền nhất định. Thật không may, nhiều dịch vụ thẩm định tự động yêu cầu thành viên / đăng ký để sử dụng. Trong thử thách này, bạn sẽ viết một công cụ thẩm định đơn giản có thể ước tính gần đúng các giá trị của tên miền .com.

Đầu ra đầu vào

Là đầu vào, chương trình của bạn sẽ lấy một danh sách các tên miền, mỗi tên một dòng. Mỗi tên miền sẽ khớp với biểu thức chính quy ^[a-z0-9][a-z0-9-]*[a-z0-9]$, có nghĩa là nó bao gồm các chữ cái thường, chữ số và dấu gạch nối. Mỗi miền dài ít nhất hai ký tự và không bắt đầu cũng không kết thúc bằng dấu gạch nối. Cái .comnày được bỏ qua từ mỗi miền, vì nó được ngụ ý.

Là một dạng đầu vào thay thế, bạn có thể chọn chấp nhận một tên miền dưới dạng một mảng số nguyên, thay vì một chuỗi ký tự, miễn là bạn chỉ định chuyển đổi ký tự sang số nguyên mong muốn.

Chương trình của bạn sẽ xuất ra một danh sách các số nguyên, mỗi số một dòng, cung cấp giá được thẩm định của các miền tương ứng.

Internet và các tập tin bổ sung

Chương trình của bạn có thể có quyền truy cập vào các tệp bổ sung, miễn là bạn cung cấp các tệp này như một phần câu trả lời của bạn. Chương trình của bạn cũng được phép truy cập tệp từ điển (danh sách các từ hợp lệ mà bạn không phải cung cấp).

(Chỉnh sửa) Tôi đã quyết định mở rộng thử thách này để cho phép chương trình của bạn truy cập internet. Có một vài hạn chế, đó là chương trình của bạn không thể tra cứu giá (hoặc lịch sử giá) của bất kỳ tên miền nào và nó chỉ sử dụng các dịch vụ có sẵn (sau này để che giấu một số lỗ hổng).

Giới hạn duy nhất trên tổng kích thước là giới hạn kích thước câu trả lời được áp đặt bởi SE.

Ví dụ đầu vào

Đây là một số tên miền được bán gần đây. Tuyên bố miễn trừ trách nhiệm: Mặc dù không có trang web nào trong số này có vẻ độc hại, tôi không biết ai kiểm soát chúng và do đó khuyên không nên truy cập chúng.

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

Ví dụ đầu ra

Những con số này là có thật.

635
31
2000
1
2001
5
160
1

Chấm điểm

Ghi điểm sẽ dựa trên "sự khác biệt của logarit." Ví dụ: nếu một tên miền được bán với giá 300 đô la và chương trình của bạn đã đánh giá nó ở mức 500 đô la, điểm số của bạn cho tên miền đó là abs (ln (500) -ln (300)) = 0,5108. Không có tên miền sẽ có giá dưới 1 đô la. Điểm tổng thể của bạn là điểm trung bình của bạn cho nhóm tên miền, với điểm thấp hơn tốt hơn.

Để có được ý tưởng về điểm số mà bạn nên mong đợi, chỉ cần đoán một hằng số 36cho dữ liệu đào tạo bên dưới sẽ cho kết quả về điểm số 1.6883. Một thuật toán thành công có một số điểm ít hơn này.

Tôi đã chọn sử dụng logarit vì các giá trị trải dài theo một số bậc độ lớn và dữ liệu sẽ được điền vào các ngoại lệ. Việc sử dụng sự khác biệt tuyệt đối thay vì bình phương chênh lệch sẽ giúp làm giảm hiệu ứng của các ngoại lệ trong việc ghi bàn. (Ngoài ra, lưu ý rằng tôi đang sử dụng logarit tự nhiên, không phải cơ sở 2 hoặc cơ sở 10.)

Nguồn dữ liệu

Tôi đã lướt qua danh sách hơn 1.400 tên miền .com được bán gần đây từ Flippa , một trang web đấu giá tên miền. Dữ liệu này sẽ tạo thành tập dữ liệu đào tạo. Sau khi thời gian gửi kết thúc, tôi sẽ đợi thêm một tháng để tạo một bộ dữ liệu thử nghiệm, trong đó các bài nộp sẽ được ghi. Tôi cũng có thể chọn thu thập dữ liệu từ các nguồn khác để tăng kích thước của tập huấn luyện / kiểm tra.

Các dữ liệu đào tạo có sẵn tại ý chính sau đây. (Tuyên bố miễn trừ trách nhiệm: Mặc dù tôi đã sử dụng một số bộ lọc đơn giản để xóa một số tên miền NSFW một cách trắng trợn, một số vẫn có thể được chứa trong danh sách này. Ngoài ra, tôi khuyên bạn không nên truy cập bất kỳ tên miền nào mà bạn không nhận ra .) Các số ở phía bên phải là Giá thật. https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

Dưới đây là một biểu đồ phân phối giá của tập dữ liệu đào tạo. Trục x là bản ghi tự nhiên của giá, với trục y được tính. Mỗi thanh có chiều rộng 0,5. Các gai ở bên trái tương ứng với $ 1 và $ 6 do trang web nguồn yêu cầu giá thầu tăng ít nhất $ 5. Các dữ liệu thử nghiệm có thể có một phân phối hơi khác nhau.

nhập mô tả hình ảnh ở đây

Đây là một liên kết đến cùng một biểu đồ với chiều rộng thanh là 0,2. Trong biểu đồ đó, bạn có thể thấy các đột biến ở mức $ 11 và $ 16.


Chỉ cần ngẩng cao đầu, sử dụng các sơ đồ phổ biến nhất để chấm điểm một tên miền hoạt động rất nhiều! R² 0

2
Ai đó rõ ràng cần phải làm một câu trả lời mạng thần kinh cho việc này.
dùng48538

1
Chương trình có thể liên kết với internet (giả sử, truy vấn google) không? Tất nhiên không phải vì mục đích tra cứu giá, mà là để thu thập dữ liệu để sử dụng như một đặc điểm.
Joe

@Joe Xin lỗi tôi chưa có cơ hội trả lời, nhưng tôi đã quyết định cho phép truy cập internet.
PhiNotPi

Câu trả lời:


3

Perl, 1.38605

Tôi hình dung mình nên tiếp tục và đăng bài dự thi của mình, với hy vọng nó thúc đẩy cạnh tranh. Điểm số của nó 1.38605có nghĩa là nó thường bị tắt bởi một yếu tố 3.999(đó là điểm dừng của tôi). Tôi đã không sử dụng bất kỳ thư viện máy học nào, chỉ cần thẳng lên Perl. Nó không yêu cầu truy cập vào một từ điển; Tôi đã sử dụng một từ đây .

Xin vui lòng sử dụng một số số liệu / số liệu thống kê từ chương trình của tôi trong riêng bạn.

use strict;

my %dict;
my $dictname = "dict.txt";
open(my $dfh, '<', $dictname);
while (my $row = <$dfh>) {
  chomp $row;
  $dict{lc $row} = 1;
}

my $domain = <>;
chomp($domain);

my $guess = 1;

if($domain =~ /^[a-z]*$/){
    my @bylength = (200000,20001,401,45,45,41,26,26,26,26,26,24);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 18;
  }
} elsif ($domain =~ /^[0-9]*$/){
  my @bylength = (300000,30001,6000,605,50);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 7;
  }
} elsif ($domain =~ /^[a-z0-9]*$/){
  my @bylength = (52300,523,28);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 23;
  }
} else {
  my @bylength = (50000,500,42,32,32,31);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 12;
  }
}

my $wordfact = 1;

my $leftword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, 0, $i;
  if(exists($dict{$word})){
    $leftword = $i;
  }
}

$wordfact *= ($leftword/length($domain))**2 * 0.8 + ($leftword/length($domain)) * -0.1 + 0.9;

if($leftword/length($domain) >= 0.8){
  $wordfact *= 2.4;
}

my $rightword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, length($domain)-$i, $i;
  if(exists($dict{$word})){
    $rightword = $i;
  }
}

$wordfact *= ($rightword/length($domain))**2 * 0.9 + ($rightword/length($domain)) * -0.2 + 1;         

$guess *= $wordfact;

my $charfact = 1;
my %charfacts = (
  i => 1.12, #500
  l => 0.84,
  s => 1.09,
  a => 0.94,
  r => 1.03,
  o => 0.97, 
  c => 1.22, #400
  d => 0.88,
  u => 1.07,
  t => 0.95,
  e => 1.08,
  m => 0.91, #300
  p => 1.08,
  y => 0.92,
  g => 0.97,
  ne => 0.56, #100
  n => 1.13,
  z => 0.67,
  re => 1.30,
  es => 0.75,
);
while(my ($key,$value) = each %charfacts){
  if($domain =~ /$key/){
    $charfact *= $value;
  }
}
$guess *= $charfact;

$guess = int($guess + 0.5);
if($guess <= 0){
  $guess = 1;
}

print $guess;

Đây là một biểu đồ được tạo bởi chương trình tính điểm của tôi, hiển thị một biểu đồ đánh giá phân tán so với giá thực tế và biểu đồ các lỗi. Trong biểu đồ phân tán .:oO@có nghĩa là 10, 20, 30, 40, 50các miền tại điểm đó, tương ứng. Trong biểu đồ, mỗi Ođại diện cho 16 tên miền.

Thang đo được đặt tại 1 character width = e^(1/3).

nhập mô tả hình ảnh ở đây

Có ba bước chính cho chương trình này. Kết quả từ mỗi bước được nhân với nhau.

  1. Phân loại theo lớp nhân vật và độ dài. Nó xác định nếu tên miền là tất cả các chữ cái, tất cả các số, chữ cái và số hoặc nếu nó có chứa một dấu gạch nối. Sau đó, nó đưa ra một giá trị số được xác định bởi độ dài của miền. Tôi thấy rằng có một sự sụt giảm giá trị kỳ lạ xung quanh chiều dài 5. Tôi nghi ngờ điều này là do lấy mẫu: các tên miền ngắn hơn có giá trị do độ dài của chúng (ngay cả khi các chữ cái là vô nghĩa), trong khi hầu hết các tên miền dài hơn có xu hướng là từ / cụm từ. Tôi yêu cầu ngăn chặn quá mức, tôi đặt ra một hạn chế trong đó các tên miền không thể bị phạt vì ngắn hơn (vì vậy chiều dài 5 ít nhất là bằng chiều dài 6).

  2. Đánh giá nội dung từ. Tôi sử dụng từ điển để xác định độ dài của các từ bên trái và bên phải trong một tên miền. Ví dụ , myawesomesite -> my & site -> 2 & 4. Sau đó, tôi cố gắng thực hiện một số điều chỉnh dựa trên tỷ lệ của tên miền được tạo thành bởi những từ đó. Các giá trị thấp thường chỉ ra rằng tên miền không chứa một từ, chứa một từ số nhiều / sửa đổi không có trong từ điển, chứa một từ được bao quanh bởi các ký tự khác (các từ bên trong không được phát hiện, mặc dù tôi đã thử mà không cải thiện) hoặc chứa một cụm từ nhiều từ. Giá trị cao chỉ ra rằng đó là một từ đơn hoặc có khả năng là một cụm từ hai từ.

  3. Đánh giá nội dung nhân vật. Tôi đã tìm các chuỗi con được chứa trong nhiều miền và dường như ảnh hưởng đến các giá trị của miền. Tôi tin rằng điều này được gây ra bởi một số loại từ phổ biến hơn / hấp dẫn hơn, vì nhiều lý do. Ví dụ, bức thưi xuất hiện trong khoảng một nửa số tên miền (741 trong số đó) và tăng trung bình khoảng 12% giá trị tên miền. Đó không phải là quá mức; có một cái gì đó thực sự ở đó, mà tôi không hiểu đầy đủ. Bức thư lxuất hiện trong 514 tên miền và có hệ số 0,84. Một số chữ cái / sơ đồ ít phổ biến hơn, như nexuất hiện 125 lần và có hệ số thực sự thấp là 0,56, có thể bị thừa.

Để cải thiện chương trình này, có lẽ tôi sẽ cần phải sử dụng một số loại máy học. Ngoài ra, tôi có thể tìm kiếm các mối quan hệ giữa độ dài, nội dung từ và nội dung ký tự để tìm ra cách kết hợp tốt hơn các kết quả riêng biệt đó vào giá trị thẩm định tổng thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.